打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
C# 异步转同步 TaskCompletionSource

本文通过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

参考资料:

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
C# 异步编程
C#异步的世界【上】
异步陷阱之死锁篇
c# async/await的用法
实用技巧
异步编程基础
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服