【发布时间】:2020-03-02 14:09:10
【问题描述】:
在尝试检查异步方法的结果时,出现以下错误。
await container.ExistsAsync().Result 和 bool result = await container.GetAwaiter().GetResult(); 都没有尝试过。
我哪里错了?
[TestMethod]
public async Task StorageAccountConnectionTest()
{
var storageCredentials = new StorageCredentials(_mockFuncXTransConfiguration.Object.StorageAccountName, _mockFuncXransConfiguration.Object.StorageAccountKey);
var cloudStorageAccount = new CloudStorageAccount(storageCredentials, true);
var cloudBlobClient = cloudStorageAccount.CreateCloudBlobClient();
var container = cloudBlobClient.GetContainerReference(_mockFuncXTransConfiguration.Object.BlobName);
bool result = await container.ExistsAsync().Result;
Assert.AreEqual(true, result);
}
【问题讨论】:
-
await异步结果或GetAwaiter().GetResult()同步结果 - 不是两者。 (在这种情况下,似乎根本没有理由去同步。) -
你不能
await Task.Result,你就用await Task,所以用bool result = await container.ExistsAsync(); -
错误的重复链接。这与 Task 没有 GetAwaiter 无关,正如问题所述,
bool没有 GetAwaiter,这是因为这是同步和异步代码的大杂烩。ExistsAsync().Result将强制立即阻塞并等待结果可用,所有可能发生死锁。await这里没有需要,或者更确切地说,这里不应该调用Result,而是应该等待来自ExistsAsync()的任务来获得布尔结果。副本是关于完全不同的东西。
标签: c# async-await