Я пытаюсь дождаться обратного вызова, который срабатывает при нажатии кнопки. Важным моментом является то, что я хочу дождаться обратного вызова от простого await
без изменения кода. Другими словами, я хочу добиться следующего:
internal async Task BatchLogic()
{
ProgressMessage = "Batch Logic Starts";
await OnCallbackFired();
ProgressMessage = "Batch Logic Ends";
}
моя попытка
internal async Task BatchLogic()
{
ProgressMessage = "Batch Logic Starts";
await Task.Factory.FromAsync(beginMethod, endMethod, state);
ProgressMessage = "Batch Logic Ends";
}
со следующими определениями
private object state = null;
private void endMethod(IAsyncResult obj)
{
IsBusy = false;
}
private AsyncCallback callback;
private IAsyncResult beginMethod(AsyncCallback callback, object state)
{
return Task.FromResult(true);
}
Когда кнопка нажата,выполняется следующий код:
private async void RunNext()
{
isBusy = true;
await workToDo();
isBusy = false; // the first 3 lines are not relevant
callback = new AsyncCallback(endMethod);
callback.Invoke(Task.FromResult(true));
}
Проблема в том, что endMethod
вызывается из callback.Invoke
, но Factory.FromAsync
никогда не возвращается, скорее всего, потому что я не понял, как его использоватьи я не нашел пример, соответствующий тому, чего я пытаюсь достичь.