如何在等待Task时获得它的句柄

本文关键字:句柄 在等待 Task | 更新日期: 2023-09-27 17:59:17

// This does not work
Task t = await Task.Run(async () => { await requestThread.Execute(); }, cts.Token);
// This does work
Task t = Task.Run(async () => { await requestThread.Execute(); }, cts.Token);

当我尝试以上操作(等待(时,我得到错误"无法将类型"void"隐式转换为"System.Threading.Tasks.Task">

获取task.Run返回的任务的句柄的正确方法是什么?

Execute方法定义如下:

public async Task Execute() 

如何在等待Task时获得它的句柄

您不必在创建对象的同一行等待对象,进行完全可以

Task t = Task.Run(async () => { await requestThread.Execute(); }, cts.Token);
await t;

现在您有了对t的引用,它一直在等待完成。


顺便说一句,我觉得很奇怪,你把异步任务包装在Task.Run中,异步方法在内部等待之前,在开始时有一个很大的同步部分吗?如果没有,你可能只需要做

Task t = requestThread.Execute();
await t;