Передача действия <> в асинхронный метод - PullRequest
0 голосов
/ 06 декабря 2018

В асинхронном методе я понимаю, что out и ref не могут быть использованы.Но мне неясно, какие последствия использования Действие (или делегатов).Хотя я признаю, что значение, заданное в действии, может быть недоступно до окончания ожидания, есть ли другие проблемы с приведенным ниже?У них проблемы с потоками?Я много гуглил по этому вопросу, но нигде не могу найти ясности.

protected async Task<gPeriod> MapPeriod(string value, Action<int> setOutput)
{
    (...) //omitted code
    int x = await MyMethodAsync(value)
    setOutput(x);
    return gPeriod;  //calculation of this not shown in this example
}

1 Ответ

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

Когда вы всегда await задача, код с точки зрения программистов работает очень близко к синхронному коду.Но когда вы начинаете делать такие вещи, как

var task1 = FooAsync(setOutput);
var task2 = BarAsync(setOutput);
var result1 = await task1;
var result2 = await task2;

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

В любом случае, ваш код в порядке.

...