Xav*_*nas 3 c# task-parallel-library async-await c#-5.0 .net-4.5
我使用一个名为DoWork(...)的异步方法的库,它将在操作完成时引发WorkDone事件.
我想编写一个调用这个库的方法,但不是保持相同的模式,我希望我的方法async可以调用它await.
从本质上讲,我想要做的是:
public async Task<Result> SomeMethod()
{
var result = new Task<Result>();
library.WorkDone += (data) =>
{
result.Result = data;
}
library.DoWork();
return await result;
}
Run Code Online (Sandbox Code Playgroud)
(因为结果是只读的而无法工作)
可以这样做吗?
我将以ws0205的答案为基础:
首先,你表明你希望你的方法"与被称为await".你通过返回一个来实现这一点Task.
我也认为最好对ws0205的答案进行以下调整:
public Task<Result> SomeMethod() //no async, since we're not awaiting anything
{
var result = new TaskCompletionSource<Result>();
library.WorkDone += (data) =>
{
result.TrySetResult(data); //just in case
};
library.DoWork();
return result.Task; //no need to await - we're returning a Task - let the caller await (or not)
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1313 次 |
| 最近记录: |