gpt4 book ai didi

c# - 如何将 async/await 与使用基于事件的异步模式的库一起使用?

转载 作者:行者123 更新时间:2023-11-30 14:12:49 25 4
gpt4 key购买 nike

我使用一个库,它有一个名为 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;
}

(不工作,因为结果是只读的)

这可以做到吗?

最佳答案

我将基于 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)
}

关于c# - 如何将 async/await 与使用基于事件的异步模式的库一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16206820/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com