我覺得有更好的方法可以做以下事情並尋找其他意見。基本上,我試圖利用異步/等待模式,但需要從方法返回一個布爾值,以指示在導致我用任務包裝任務的方法中發生的事情,以便這可以完成。我的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;' –