有没有理由立即使用await和async?

时间:2017-10-09 01:24:05

标签: c# vb.net multithreading asynchronous

我在网上找到了这个代码。

    If request.Content IsNot Nothing Then
        ' Hash content to ensure message integrity
        Using md5__1 = MD5.Create()
            requestContentBase64String = Convert.ToBase64String(md5__1.ComputeHash(Await request.Content.ReadAsByteArrayAsync()))
        End Using
    End If

做一些异步的事情的重点是在等待异步的东西完成时可以先做其他事情。

所以

dim task = somethingasync()
doSomething
await task

会有意义

await somethingasync对我没有任何意义。重点是什么?无论如何你什么也没做。无论如何,你等到什么东西都完成了。

事实上,甚至

dim task = somethingasync()
doSomething
await task

包含await运算符的东西不应该在主UI线程上吗?那是因为我们不希望用户等待。

这是事情。如果整个事情发生在非主UI线程中,那么整个事情等待结果的重点是什么?

为什么不使用同步版本?

1 个答案:

答案 0 :(得分:1)

检查你的功能:

您可以在异步功能中执行异步操作:

//Wrong
void AsyncCallFunc()
    {
        AsyncFunc();
        //doSomething
    }

//Correct
async void TrueAsyncCallFunc()
    {
        await AsyncFunc();
        //doSomething
    }

此外,如果您使用try-catch包围它,您可以选择在finally中添加最终操作。在try:

中完成所有操作后它会立即运行
async void TrueAsyncCallFunc()
    {
        try{
            await AsyncFunc();
            //doSomething
        }
        catch(Exception){
            throw;
        }
        finally{
            //do last operation
        }
    }