返回包含在Task <t>中的值,有什么区别?

时间:2017-06-27 19:04:52

标签: .net async-await task-parallel-library

假设我有一个函数返回Task<bool>,基本上我可以用两种方式实现它,有什么区别,优点/缺点?

public async Task<bool> FooAsync()
{
    return await Task.Run(() => 
    {
        Thread.Sleep(100);
        return true;
    });
}

public Task<bool> FooAsync()
{
    return Task.Run(() => 
    {
        Thread.Sleep(100);
        return true;
    });
}

2 个答案:

答案 0 :(得分:0)

区别在于异步(代码可以在调用之后进一步移动,响应将会到来)vs并行性(并行代码执行)

答案 1 :(得分:0)

嗯,实际上没有必要在你的第一个例子中返回Task<bool>,因为你已经等待它并得到了结果。

两个示例之间的区别在于,在第一种情况下,您实际等待给定的Task将解包结果,这意味着您已经使用了布尔值。

第二个例子实际上将返回一个Task<bool>,表示正在进行的返回布尔值的工作,它基本上表示将来会返回一个布尔值。无论是谁使用您的方法,都有责任等待获得想要的结果。