C# ';布尔';不包含';GetWaiter';
在尝试检查异步方法的结果时,我得到以下错误 我既没有尝试C# ';布尔';不包含';GetWaiter';,c#,async-await,C#,Async Await,在尝试检查异步方法的结果时,我得到以下错误 我既没有尝试await container.ExistsAsync().Result也没有尝试bool Result=await container.GetAwaiter().GetResult()工作 我哪里做错了 [TestMethod] public async Task StorageAccountConnectionTest() { var storageCredentials = new StorageCredentials(_mo
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);
}
您当前正试图等待任务的结果:
bool result = await container.GetAwaiter().GetResult().Result;
这是多余的,但也是一个等待发生的死锁问题。(几乎从不直接调用.Result
。)相反,等待产生结果的任务:
bool result = await container.GetAwaiter().GetResult();
Edit:正如下面的评论所指出的,我没有注意到容器已经是一项任务了。由于整个方法已经是async
,您可以跳过所有GetAwaiter
内容,直接等待它:
bool result = await container;
编辑:如评论中进一步指出的,您提供的代码似乎与屏幕截图中实际使用的代码不匹配。容器
本身不是任务,但有一个方法返回您想要的任务:
bool result = await container.ExistsAsync();
该方法已经是异步的-根本不需要使用.GetAwaiter.GetResult()。它可以只是等待。或者她可以只是等待任务:bool result=await container
@David,你能指出哪里可以阅读关于GetAwaiter().GetResult()的内容吗应使用代码>而不是结果
?来自TaskAwaiter.GetResult
的MS帮助:此API支持产品基础结构,不打算直接从代码中使用。仅供参考,代码应为wait container.ExistsAsync()代码>。示例代码都是乱七八糟的,但附带的屏幕截图显示了返回Task
@maccettura:的相应方法调用,现在应该修复了。看起来是这样一个很好的例子:OP在发布代码时人为地修改了代码,而不仅仅是复制/粘贴。谢谢你抓住它!wait
异步地等待结果,或者getwaiter().GetResult()
同步地等待结果——不是两者都是。(在这种情况下,似乎根本没有理由去同步。)您不能等待任务。结果,您只需使用等待任务,所以使用bool Result=wait container.ExistsAsync()代码>错误的重复链接。这并不是说任务没有GetAwaiter,而是像问题所说的那样,关于bool
没有GetAwaiter,这是因为这是一个同步和异步代码的大杂烩ExistsAsync().Result
将强制立即执行一个块,并等待结果可用,同时可能发生死锁。这里不需要wait
,或者更确切地说,这里不应该调用Result
,而是应该等待来自ExistsAsync()
的任务来获得布尔结果。复制品是关于完全不同的东西。