我觉得有更好的方法来做以下事情并寻找其他意见。
本质上,我正在尝试使用async / await模式,但需要从方法返回一个bool值来指示方法中发生的事情,这导致我用Task包装Task,这样就可以完成。我的蜘蛛侠意识告诉我,我的实施有问题。
在下面的例子中,“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);
}
答案 0 :(得分:2)
是的,你是对的,你过于复杂了。你可以这样做:
private async Task<bool> ProcessStuff(string command)
{
if (command == "GetData")
{
await LongRunningTask();
return true;
}
else
{
return false;
}
}
您可以查看MSDN以获取更多信息:Asynchronous Programming