编写一个等待bool的异步方法

我想编写一个await变量设置为true的方法。

这是psudo代码。

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

TheData将由Prism事件和IsSomethingLoading变量设置。

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

有没有办法做到这一点?

在许多情况下,你需要的是TaskCompletionSource

您可能有一种方法能够在某个时间点生成数据,但它不会使用任务来执行此操作。 也许有一个方法接受一个提供结果的回调,或一个被触发的事件来指示结果,或者只是使用一个你不想重新考虑使用Task.RunThreadThreadPool代码。

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

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

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

您可以使用TaskCompletionSource作为您的信号,并await

 TaskCompletionSource IsSomethingLoading = new TaskCompletionSource(); SomeData TheData; public async Task GetTheData() { await IsSomethingLoading.Task; return TheData; } 

在你的Prism事件中:

 IsSomethingLoading.SetResult(true);