我觉得有更好的方法来执行以下操作并寻找其他意见。
从本质上讲,我正在尝试利用异步/等待模式,但需要从方法返回一个布尔值来指示方法中发生了什么,这导致我将任务与任务包装在一起,以便完成此操作。 我的嗅觉告诉我我的实现出了问题。
在下面的示例中,"LongRunningTask"是我无法控制的东西,因为它是一个返回任务的库方法,所以我无法更改。 可以更改流逻辑的其余部分。 显然,这只是我真实问题的虚构表示,但旨在演示该问题,所以不要被硬编码的"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);
}
是的,你是对的,你把它复杂化了。你可以做:
private async Task<bool> ProcessStuff(string command)
{
if (command == "GetData")
{
await LongRunningTask();
return true;
}
else
{
return false;
}
}
您可以查看 MSDN 了解更多信息:异步编程