我觉得有更好的方法可以做以下事情并寻找其他意见。基本上,我试图利用异步/等待模式,但需要从方法返回一个布尔值,以指示在导致我用任务包装任务的方法中发生的事情,以便这可以完成。我的spidey sense告诉我我的实现有些问题。包装任务以返回值
在下面的例子中,“LongRunningTask”是我没有控制权的东西,因为它是一个返回Task的库方法,所以我不能改变它。流程逻辑的其余部分可以更改。很明显,这只是我真正的问题的一个虚构的表示,但意在证明这个问题,所以不要陷入硬编码的“GetData”中,等等......
看一看,让我知道其他选择。
void Main()
{
StartApplication();
}
private async void StartApplication()
{
// This is a just fictional example passing hard-coded GetData
var didExecuteLongRunningTask = await ProcessStuff("GetData");
if (didExecuteLongRunningTask)
{
Console.WriteLine("Long running task was executed");
}
else {
Console.WriteLine("Long running task was NOT executed");
}
}
// Define other methods and classes here
private async Task<bool> ProcessStuff(string command)
{
if (command == "GetData")
{
await LongRunningTask();
return await Task<bool>.Factory.StartNew(() => true);
}
else
{
return await Task<bool>.Factory.StartNew(() => false);
}
}
private Task LongRunningTask()
{
return Task.Delay(2000);
}
你的函数标记为'async'只是不'返回true;'或'返回false;' –