为什么这个异步函数期望返回值

时间:2019-10-28 08:46:29

标签: c# async-await return

我的功能如下:

query_set

上面的代码未编译,因为它在等待之后期望返回值。为什么是这样?任务中的代码在所有执行路径上返回一个值,我认为应由await机制处理在await之后返回此值。我应该在上面返回什么?我需要做这样的事情吗?

public static async Task<bool> DoSomething()
{
    await Task.Run(() =>
    {
        //do something that takes a long time
        bool success = ALongFunction();
        return success;
    });
}

上面的代码确实可以编译,但是我希望上面的代码也可以编译。

2 个答案:

答案 0 :(得分:3)

您返回一个bool值,而您的方法实际上返回了一个Task<bool>

更改方法以返回等待的Task

return await Task.Run(...);

答案 1 :(得分:0)

在当前形式下,该函数仅返回任务(不返回Task<bool>)。

public static async Task<bool> DoSomething()
{
    await Task.Run(() =>
    {
        return AFunctionThatTakesALongTime();
    });
}

等同于以下代码段:

public static async Task<bool> DoSomething()
{
    bool r = await Task.Run(() =>
    {
        return AFunctionThatTakesALongTime();
    });
    // not returning r
}

解决方案

return await Task.Run(() => ...)