gpt4 book ai didi

c# - 编写一个等待 bool 值的异步方法

转载 作者:可可西里 更新时间:2023-11-01 07:52:06 31 4
gpt4 key购买 nike

我想编写一个方法来等待将变量设置为 true。

这是伪代码。

bool IsSomethingLoading = false
SomeData TheData;

public async Task<SomeData> GetTheData()
{
await IsSomethingLoading == true;
return TheData;
}

TheData 将由 Prism Event 与 IsSomethingLoading 变量一起设置。

我调用了 GetTheData 方法,但我希望它异步运行(现在它只在数据未准备好时返回 null。(这会导致其他问题。)

有办法吗?

最佳答案

在许多类似的情况下,您需要的是 TaskCompletionSource

您可能有一种方法能够在某个时间点生成数据,但它不使用任务来完成。也许有一个方法接受一个提供结果的回调,或者一个被触发的事件来指示有一个结果,或者只是使用 ThreadThreadPool 的代码您不倾向于重新考虑使用 Task.Run

public Task<SomeData> GetTheData()
{
TaskCompletionSource<SomeData> tcs = new TaskCompletionSource<SomeData>();
SomeObject worker = new SomeObject();
worker.WorkCompleted += result => tcs.SetResult(result);
worker.DoWork();
return tcs.Task;
}

虽然您可能需要/想要将 TaskCompletionSource 提供给 worker 或其他类,或者以其他方式将其暴露给更广泛的范围,但我发现通常不需要,尽管在适当的时候它是一个非常强大的选项。

您也可以使用 Task.FromAsync 创建一个基于异步操作的任务,然后直接返回该任务,或者在您的代码中 await .

关于c# - 编写一个等待 bool 值的异步方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15122936/

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