C# 使用Awaiter

Posted dotNET跨平台

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C# 使用Awaiter相关的知识,希望对你有一定的参考价值。

可以对任何提供 GetAwaiter 方法并返回 awaiter 的对象使用 async 关键字。awaiter 用 OnCompleted 方法实现 INotifyCompletion 接口。此方法在任务完成时调用。下面的代码片段不是在任务中使用 await,而是使用任务的 GetAwaiter 方法。Task 类的 GetAwaiter 返回一个 TaskAwaiter。使用 OnCompleted 方法,分配一个在任务完成时调用的本地函数:

private static void CallerWithAwaiter()

  TraceThreadAndTask($"starting nameof(CallerWithAwaiter)");
  TaskAwaiter<string> awaiter = GreetingAsync("Matthias").GetAwaiter();
  awaiter.OnCompleted(OnCompleteAwaiter);
  void OnCompleteAwaiter()
  
    Console.WriteLine(awaiter.GetResult());
    TraceThreadAndTask($"ended nameof(CallerWithAwaiter)");
  

运行应用程序时,结果类似于你使用 wait 关键字的情形:

starting CallerWithAwaiter in thread 2 and no task 
running GreetingAsync in thread 3 and task 1 
running Greeting in thread 3 and task 1 
Hello,Matthias
ended CallerWithAwaiter in thread 3 and no task

编译器把 await 关键字后的所有代码放进 OnCompleted 方法的代码块中来转换 await 关键字。

以上是关于C# 使用Awaiter的主要内容,如果未能解决你的问题,请参考以下文章

TypeScript 2.1 async/await ES5 __awaiter 和 __generator 为每个 ts 文件生成

在 C# 中执行 PowerShell 脚本时调用响应为空

C#代码篇:代码产生一个csv文件调用有两个核心的坑

桌面窗口集合更改时调用异步委托?

如何在运行时调整 Android listview 列宽?

如何调整图像的大小 C#