包装任务以返回值



我觉得有更好的方法来执行以下操作并寻找其他意见。

本质上讲,我正在尝试利用异步/等待模式,但需要从方法返回一个布尔值来指示方法中发生了什么,这导致我将任务与任务包装在一起,以便完成此操作。 我的嗅觉告诉我我的实现出了问题。

在下面的示例中,"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 了解更多信息:异步编程

最新更新