当前位置: 移动技术网 > IT编程>开发语言>.net > C# 异步转同步 TaskCompletionSource

C# 异步转同步 TaskCompletionSource

2019年07月07日  | 移动技术网IT编程  | 我要评论

范承秀,qq管家dnf礼包,君华仕

本文通过taskcompletionsource,实现异步转同步

首先有一个异步方法,如下异步任务延时2秒后,返回一个结果

1     private static async task<string> testwithresultasync()
2     {
3         debug.writeline("1. 异步任务start……");
4         await task.delay(2000);
5         debug.writeline("2. 异步任务end……");
6         return "2秒以后";
7     }

如何使用taskcompletionsource将此异步方法转成同步呢?

1     private void taskcompletesourcebutton_onclick(object sender, routedeventargs e)
2     {
3         var result = awaitbytaskcompletesource(testwithresultasync);
4         debug.writeline($"4. taskcompletesource_onclick end:{result}");
5     }

taskcompletionsource使用步骤:

  1. 获取var sourcetask =taskcompletionsource.task,
  2. 等待此sourcetask结果-sourcetask.result
  3. 设置设置sourcetask.result的结果值
 1     private string awaitbytaskcompletesource(func<task<string>> func)
 2     {
 3         var taskcompletionsource = new taskcompletionsource<string>();
 4         var task1 = taskcompletionsource.task;
 5         task.run(async () =>
 6         {
 7             var result = await func.invoke();
 8             taskcompletionsource.setresult(result);
 9         });
10         var task1result = task1.result;
11         debug.writeline($"3. awaitbytaskcompletesource end:{task1result}");
12         return task1result;
13     }

测试结果:

 

 关键字:异步转同步,taskcompletionsource

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网