«bool» не содержит определения «GetAwaiter» - PullRequest
0 голосов
/ 02 марта 2020

При попытке проверить результат асинхронного метода я получаю следующую ошибку.

Ни я не пытался 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);
}

enter image description here

1 Ответ

3 голосов
/ 02 марта 2020

В настоящее время вы пытаетесь дождаться результата задачи:

bool result = await container.GetAwaiter().GetResult().Result;

Это избыточно, но также существует проблема тупиковой ситуации, ожидающая возникновения. (Почти никогда не вызывайте .Result напрямую.) Вместо этого await задача, которая дает результат:

bool result = await container.GetAwaiter().GetResult();

Редактировать: Как указано в комментариях ниже, я бы пропустил, что container уже является задачей. Поскольку весь метод уже async, вы можете пропустить все элементы GetAwaiter и просто ждать его непосредственно:

bool result = await container;

Редактировать: Как дополнительно указано в комментариях, похоже, что предоставленный вами код не соответствует коду, который вы фактически используете на снимке экрана. Сам по себе container не является задачей, но имеет метод, который возвращает нужную задачу:

bool result = await container.ExistsAsync();
...