У меня проблема с методами async
. Мой код выглядит следующим образом:Синхронизировать методы асинхронизации
var bid = await _applicationDataService.GetSnapshotFromServerAsync(b.BidId.ToString(), b.BidVersion);
if (bid != null)
{
if (await _bidManagerService.CheckIfBidExistsInLocalDbAsync(bid.BidId, bid.BidVersion))
{
await _bidManagerService.OverrideBidInLocalDbAsync(bid);
}
else
{
await _bidManagerService.SaveBidInLocalDbAsync(bid);
}
}
и в другом месте в проекте у меня есть:
await _bidContext.LoadBidByIdAsync(bidId.Value);
Проблема заключается в том, что объект еще не может быть сохранен локально, но метод будет пытаться загрузить Это. Мне нужно как-то ждать, пока первый блок не закончит загрузку и сохранение, а затем мне нужно запустить второй блок.
Я не могу заморозить главную угрозу, потому что пользовательский интерфейс не будет реагировать.
я нашел что-то вроде этого:
Это не имеет никакого отношения к 'async'. Если вы пытаетесь загрузить данные из * другого * потока, вам необходимо синхронизировать доступ. Или просто * не используйте другой поток. Если ваши методы действительно асинхронны, они не будут блокировать пользовательский интерфейс. Используете ли вы опрос для загрузки нового объекта из другого потока? –
Да, вам нужен какой-то «AsyncManualResetEvent» или «AsyncAutoResetEvent» (используйте его в первой ссылке). Подождите события во втором блоке и установите сигнал после завершения первого блока. Все готово. –
Голосование, чтобы закрыть; самый простой ответ - просто «подождать» первого блока, прежде чем разрешить запуск второго блока. Или возьмите «Задачу». Или 'AsyncLazy'. Или 'СемафорСлим'. Нужно больше контекста, чтобы определить, какой из них будет лучше. –