Suche…


Syntax

  • Async & Warten

  • public Task MyTask Async () {doSomething (); }

    Erwarte MyTaskAsync ();

  • public Task <string> MyStringTask Async () {return getSomeString (); }

    string MyString = Erwarte MyStringTaskAsync ();

  • Anruferinformationsattribute

  • public void MyCallerAttributes (Zeichenfolge MyMessage,

    [CallerMemberName] Zeichenfolge MemberName = "",

    [CallerFilePath] string SourceFilePath = "",

    [CallerLineNumber] int LineNumber = 0)

  • Trace.WriteLine ("My Message:" + MyMessage);

    Trace.WriteLine ("Member:" + MemberName);

    Trace.WriteLine ("Source File Path:" + SourceFilePath);

    Trace.WriteLine ("Line Number:" + LineNumber);

Parameter

Methode / Modifikator mit Parameter Einzelheiten
Type<T> T ist der Rückgabetyp

Bemerkungen

C # 5.0 ist mit Visual Studio .NET 2012 gekoppelt

Async & Warten

async und await sind zwei Operatoren, die die Leistung verbessern sollen, indem sie Threads async und await , bis die Operationen abgeschlossen sind, bevor sie fortfahren.

Hier ein Beispiel, wie Sie einen String abrufen, bevor Sie seine Länge zurückgeben:

//This method is async because:
//1. It has async and Task or Task<T> as modifiers
//2. It ends in "Async"
async Task<int> GetStringLengthAsync(string URL){
    HttpClient client = new HttpClient();
    //Sends a GET request and returns the response body as a string
    Task<string> getString = client.GetStringAsync(URL);
    //Waits for getString to complete before returning its length
    string contents = await getString;
    return contents.Length;
}

private async void doProcess(){
    int length = await GetStringLengthAsync("http://example.com/");
    //Waits for all the above to finish before printing the number
    Console.WriteLine(length);
}

Hier ist ein weiteres Beispiel für das Herunterladen einer Datei und das Behandeln, was passiert, wenn sich der Fortschritt geändert hat und der Download abgeschlossen ist (es gibt zwei Möglichkeiten, dies durchzuführen):

Methode 1:

//This one using async event handlers, but not async coupled with await
private void DownloadAndUpdateAsync(string uri, string DownloadLocation){
    WebClient web = new WebClient();
    //Assign the event handler
    web.DownloadProgressChanged += new DownloadProgressChangedEventHandler(ProgressChanged);
    web.DownloadFileCompleted += new AsyncCompletedEventHandler(FileCompleted);
    //Download the file asynchronously
    web.DownloadFileAsync(new Uri(uri), DownloadLocation);
}

//event called for when download progress has changed
private void ProgressChanged(object sender, DownloadProgressChangedEventArgs e){
    //example code
    int i = 0;
    i++;
    doSomething();
}

//event called for when download has finished
private void FileCompleted(object sender, AsyncCompletedEventArgs e){
    Console.WriteLine("Completed!")
}

Methode 2:

//however, this one does
//Refer to first example on why this method is async
private void DownloadAndUpdateAsync(string uri, string DownloadLocation){
    WebClient web = new WebClient();
    //Assign the event handler
    web.DownloadProgressChanged += new DownloadProgressChangedEventHandler(ProgressChanged);
    //Download the file async
    web.DownloadFileAsync(new Uri(uri), DownloadLocation);
    //Notice how there is no complete event, instead we're using techniques from the first example
}
private void ProgressChanged(object sender, DownloadProgressChangedEventArgs e){
    int i = 0;
    i++;
    doSomething();
}
private void doProcess(){
    //Wait for the download to finish
    await DownloadAndUpdateAsync(new Uri("http://example.com/file"))
    doSomething();
}

Anruferinformationsattribute

CIAs sind als einfache Methode gedacht, um Attribute von dem abzurufen, was die Zielmethode aufruft. Es gibt wirklich nur eine Möglichkeit, sie zu verwenden, und es gibt nur drei Attribute.

Beispiel:

//This is the "calling method": the method that is calling the target method
public void doProcess()
{
    GetMessageCallerAttributes("Show my attributes.");
}
//This is the target method
//There are only 3 caller attributes
public void GetMessageCallerAttributes(string message,
    //gets the name of what is calling this method
    [System.Runtime.CompilerServices.CallerMemberName] string memberName = "",
    //gets the path of the file in which the "calling method" is in
    [System.Runtime.CompilerServices.CallerFilePath] string sourceFilePath = "",
    //gets the line number of the "calling method"
    [System.Runtime.CompilerServices.CallerLineNumber] int sourceLineNumber = 0)
{
    //Writes lines of all the attributes
    System.Diagnostics.Trace.WriteLine("Message: " + message);
    System.Diagnostics.Trace.WriteLine("Member: " + memberName);
    System.Diagnostics.Trace.WriteLine("Source File Path: " + sourceFilePath);
    System.Diagnostics.Trace.WriteLine("Line Number: " + sourceLineNumber);
}

Beispielausgabe:

//Message: Show my attributes.
//Member: doProcess
//Source File Path: c:\Path\To\The\File
//Line Number: 13


Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow