我是否需要等待我在Azure客户端库中使用的异步调用
MyFunction()
{
//break data load into blocks and upload individual block
{
BlockBlob.PutBlockAsync(blockIdBase64,
new MemoryStream(dataBytes, bytesRead, bytesPerChunk),
null);
}
// commit all the blocks to the blob
BlockBlob.PutBlockListAsync(blocklist);
}
答案 0 :(得分:1)
你不需要等待他们,不。这实际上是使它们异步的原因。在堆栈的某个时刻,某些东西需要调用异步操作而不等待它以使其中的任何一个异步。
代码将同步执行,直到它到达方法本身中的异步操作。此时,系统会将async
方法的其余部分放在ContinueWith()
中,并将控制权返回给您的调用代码。
否则,你会看到一个“火灾和遗忘”的情况,你永远不会知道是否出了什么问题。这可以很简单:
BlockBlob.PutBlockListAsync(blocklist).ContinueWith(t => {
// t is the returned Task. Check it for errors, respond to its state, etc.
});
旁注:这正是应该避免async void
的原因。它不会返回Task
,因此无法像这样处理。