In diesem Artikel wird hauptsächlich die spezifische Verwendung von Async und Wait in C# vorgestellt. Der Herausgeber findet ihn recht gut, daher werde ich ihn jetzt mit Ihnen teilen und als Referenz verwenden. Folgen wir dem Editor und werfen wir einen Blick darauf
async und waiting wurden in C# 5.0 eingeführt. Diese beiden Schlüsselwörter erleichtern Ihnen das Schreiben von asynchronem Code.
Sehen Sie sich ein Beispiel an:
public class MyClass { public MyClass() { DisplayValue(); //这里不会阻塞 System.Diagnostics.Debug.WriteLine("MyClass() End."); } public Task<double> GetValueAsync(double num1, double num2) { return Task.Run(() => { for (int i = 0; i < 1000000; i++) { num1 = num1 / num2; } return num1; }); } public async void DisplayValue() { double result = await GetValueAsync(1234.5, 1.01);//此处会开新线程处理GetValueAsync任务,然后方法马上返回 //这之后的所有代码都会被封装成委托,在GetValueAsync任务完成时调用 System.Diagnostics.Debug.WriteLine("Value is : " + result); } }
Oben wird die asynchrone Methode DisplayValue() aufgerufen, die im Konstruktor von mit dem Schlüsselwort async gekennzeichnet ist MyClass. Die Methode DisplayValue() führt eine asynchrone Aufgabe GetValueAsync() aus, die mit dem Schlüsselwort „await“ gekennzeichnet ist. Diese asynchrone Aufgabe muss Task oder Task
Der tatsächlich von der DisplayValue()-Methode ausgeführte Code lautet wie folgt:
public void DisplayValue() { System.Runtime.CompilerServices.TaskAwaiter<double> awaiter = GetValueAsync(1234.5, 1.01).GetAwaiter(); awaiter.OnCompleted(() => { double result = awaiter.GetResult(); System.Diagnostics.Debug.WriteLine("Value is : " + result); }); }
Wie Sie sehen können, ist die Asynchronität und das Warten Schlüsselwörter ersetzen einfach die oben genannten. Der Code wird einfach einfacher und verständlicher.
Die Ausgabe des Programms ist wie folgt:
MyClass() End.
Wert ist: 2.47032822920623E-322
Das Folgende ist eine von mir geschriebene statische Klasse, die den asynchronen Aufruf einer allgemeinen Funktion erleichtern kann:
public static class TaskAsyncHelper { /// <summary> /// 将一个方法function异步运行,在执行完毕时执行回调callback /// </summary> /// <param name="function">异步方法,该方法没有参数,返回类型必须是void</param> /// <param name="callback">异步方法执行完毕时执行的回调方法,该方法没有参数,返回类型必须是void</param> public static async void RunAsync(Action function, Action callback) { Func<System.Threading.Tasks.Task> taskFunc = () => { return System.Threading.Tasks.Task.Run(() => { function(); }); }; await taskFunc(); if (callback != null) callback(); } /// <summary> /// 将一个方法function异步运行,在执行完毕时执行回调callback /// </summary> /// <typeparam name="TResult">异步方法的返回类型</typeparam> /// <param name="function">异步方法,该方法没有参数,返回类型必须是TResult</param> /// <param name="callback">异步方法执行完毕时执行的回调方法,该方法参数为TResult,返回类型必须是void</param> public static async void RunAsync<TResult>(Func<TResult> function, Action<TResult> callback) { Func<System.Threading.Tasks.Task<TResult>> taskFunc = ()=> { return System.Threading.Tasks.Task.Run(()=> { return function(); }); }; TResult rlt = await taskFunc(); if(callback != null) callback(rlt); } }
Es ist sehr einfach, den Methodennamen als Parameter zu verwenden Am häufigsten wird die zeitaufwändige Serialisierungsfunktion verwendet, um zu vermeiden, dass der UI-Prozess blockiert wird, was zu Verzögerungen führt und die Benutzererfahrung beeinträchtigt.
Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung der Verwendung von Async und Wait in C#. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!