в моем классе я использую BackgroundWorker.в какой-то момент мне нужно отменить асинхронную операцию, которая может выполняться, и немедленно начать другую.код следует.одна вещь, в которой я не уверен, это состояние гонки, которое может возникнуть, если работник завершит работу прямо перед тем, как я назначу свою лямбду событию RunWorkerCompleted.если это произойдет, моя лямбда никогда не будет вызвана.комментарий в коде показывает это место.Любые комментарии о том, как справиться с этим?
спасибо Константин
if (this.worker.IsBusy)
{
RunWorkerCompletedEventHandler f = null;
f = (s, v) =>
{
this.RunWorkerCompleted -= f;
this.worker.RunWorkerAsync();
};
// what if worker completes right before the following statement?
this.worker.RunWorkerCompleted += f;
this.worker.CancelAsync();
}
else
{
this.worker.RunWorkerAsync();
}