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

标签 c# .net asynchronous async-await

我想编写一个方法来等待将变量设置为 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/

相关文章:

c# - 如何在 Unity 中屏蔽自定义 UI 图形?

c# - Azure DevOps 发布管道,从 C# 代码读取环境变量

c# - 使用项目相对方式(而不是绝对路径)引用 XSLT 文件

javascript - 响应回调时使用 Promise

javascript - 如何将参数传递给 onQuerySucceeded 函数

C# Montouch/Xamarin - 相机快门速度

.NET 相当于 Ruby 的 begin/rescue/else

JavaScript 无法识别 Controller

javascript - 将变量传递给javascript中的异步函数( promise )

c# - 日期字段中具有可为空值的存储过程