范承秀,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 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
如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复
Blazor server side 自家的一些开源的, 实用型项目的进度之 CEF客户端
.NET IoC模式依赖反转(DIP)、控制反转(Ioc)、依赖注入(DI)
vue+.netcore可支持业务代码扩展的开发框架 VOL.Vue 2.0版本发布
网友评论