Как отменить задачу в ожидании блокировки вызова - PullRequest
0 голосов
/ 11 декабря 2018

Я новичок в приложении UWP на c #.Мне нужно отменить задачу, когда происходит блокирующий вызов.Пожалуйста, обратитесь к фрагменту кода ниже для лучшего понимания.

TimeSpan timeSpan = TimeSpan.FromMilliseconds(10000);
CancellationToken token = new CancellationTokenSource(timeSpan).Token;

    await Task.Run(() =>
                   {
                     //This is a blocking call
                     Task.Delay(11002).Wait();
                   }, token);

Поскольку я знаю, что если я выполняю блокирующий вызов, такой как Task.Delay(11002).Wait(token);, тогда задача Задержка отменяется, но я должен отменить родительскую задачу.Потому что я делаю запись в сокет синхронизации в задаче.

Надеюсь, моя проблема понятна всем.Спасибо

1 Ответ

0 голосов
/ 11 декабря 2018

Я бы порекомендовал создать источник токена отмены вне метода, который вы собираетесь использовать, и передать его, как Нил упоминал в своем комментарии.

Вот пример, показывающий, как вы можете это сделать, икак вы можете отменить его.

private async Task ParentAsync()
{
    TimeSpan timeSpan = TimeSpan.FromMilliseconds(10000);
    CancellationTokenSource cts = new CancellationTokenSource(timeSpan);

    await ExecuteAsync(cts);

    cts.Cancel(); // This will cause the execution to cancel.
}

private async Task ExecuteAsync(CancellationTokenSource cts)
{
    await Task.Run(() =>
                {
                    //This is a blocking call
                    Task.Delay(11002).Wait();
                }, cts.Token);
}

Если вы хотите отменить выполнение родительского метода, выполните те же шаги, которые вы уже сделали для дочернего метода, используя токен для обработки отмены.задачи.

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...