C# 异步转同步 TaskCompletionSource
程序员文章站
2023-11-06 10:12:58
本文通过TaskCompletionSource,实现异步转同步 首先有一个异步方法,如下异步任务延时2秒后,返回一个结果 如何使用TaskCompletionSource将此异步方法转成同步呢? TaskCompletionSource使用步骤: 测试结果: 关键字:异步转同步,TaskCompl ......
本文通过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使用步骤:
- 获取var sourcetask =taskcompletionsource.task,
- 等待此sourcetask结果-sourcetask.result
- 设置设置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
上一篇: 古代发配人犯到边关,衙役为什么抢着做?
下一篇: 西汉最倒霉的皇帝刘贺?被大臣废黜成废帝!