Существует библиотека, возвращающая 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
Экземпляры ValueTask не должны иметь прямого доступа к своему результату, если экземпляр еще не завершился. ⇐ C#
Место общения программистов C#
1730274049
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();
}
Подробнее здесь: [url]https://stackoverflow.com/questions/72715689/valuetask-instances-should-not-have-their-result-directly-accessed-unless-the-in[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия