Экземпляры ValueTask не должны иметь прямого доступа к своему результату, если экземпляр еще не завершился.C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Экземпляры ValueTask не должны иметь прямого доступа к своему результату, если экземпляр еще не завершился.

Сообщение Anonymous »

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

CA2012: Экземпляры ValueTask не должны иметь прямого доступа к своему результату, если экземпляр еще не завершен. В отличие от Tasks, вызов Result или GetAwaiter().GetResult() для ValueTask не гарантирует блокировку до завершения операции. Если вы не можете просто дождаться экземпляра, рассмотрите возможность сначала проверить его свойство IsCompleted (или подтвердить его истинность, если вы знаете, что это так).

Как это исправить?
public void CreateListenKey()
{
var result = CreateSpotListenKeyAsync().GetAwaiter().GetResult(); // CA2012: ValueTask instances should not have their result directly accessed unless the instance has already completed. Unlike Tasks, calling Result or GetAwaiter().GetResult() on a ValueTask is not guaranteed to block until the operation completes. If you can't simply await the instance, consider first checking its IsCompleted property (or asserting it's true if you know that to be the case).

if (result.Success)
{
using var document = JsonDocument.Parse(result.Data!);
lock (_listenKeyLocker)
{
if (document.RootElement.TryGetProperty("listenKey", out var listenKeyElement))
{
var listenKey = listenKeyElement.GetString();
ListenKey = listenKey;
}
}
}
}

// library
public async ValueTask CreateSpotListenKeyAsync()
{
var result = await SendPublicAsync(
"/api/v3/userDataStream",
Method.Post);

return result;
}

// Can't just make it async, because these listen key methods are used in an event handler.
private void OnKeepAliveTimerElapsed(object? sender, ElapsedEventArgs e)
{
RestApi.PingListenKey();
}


Подробнее здесь: https://stackoverflow.com/questions/727 ... ess-the-in
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»