j11codep Ответов: 1

ТПЛ configureawait сломать, чтобы получить результат + устаревшие .Объем ядра?


Изучение библиотеки TPL здесь. Если бы я хотел разбить ConfigureAwait, чтобы получить возвращаемое значение асинхронным методом, как бы я это сделал?
т. е. задан асинхронный метод GetDto (), возвращающий объект типа Dto, обычно называемый as:

var dto = await GetDto().ConfigureAwait(false);


Пытаясь понять, как это ломается, как бы я это сделал
Task t = GetDto();
await t.ConfigureAwait(false);
//how do I capture the returned dto object here?
//also, 


Кроме того, правильно ли, что в .Net Core 3 больше нет необходимости вызывать ConfigureAwait? Я думал, что каким-то образом природа проблемы заключается в том, что ConfigureAwait всегда будет служить определенной цели, поскольку вы хотели бы иметь возможность выполнять блок продолжения в том же потоке, что и асинхронный вызов, в ситуациях, которые допускают такие блоки кода продолжения, которые не имеют ссылки на объекты пользовательского интерфейса?

Спасибо

Что я уже пробовал:

Task t = GetDto();
Dto dto = await t.ConfigureAwait(false); //<-- doesn't work

1 Ответов

Рейтинг:
0

Richard Deeming

Ваш GetDto предположительно, метод возвращает Task<Dto>:

private async Task<Dto> GetDto() { ... }
В этом случае ваша переменная должна иметь правильный тип:
Task<Dto> t = GetDto();
Dto dto = await t.ConfigureAwait(false);
Или:
ConfiguredTaskAwaitable<Dto> t = GetDto().ConfigureAwait(false);
Dto dto = await t;