Использование `Task.WhenAll` с `INotifyCompletion`

#c# #asynchronous #task

#c# #асинхронный #задача

Вопрос:

У меня есть пользовательская операция, которая реализует GetAwaiter метод, который возвращает пользовательский объект, который реализует INotifyCompletion .

Task.WhenAll поддерживаются только экземпляры Task . Есть ли какой-нибудь способ обернуть задачу вокруг a INotifyCompletion ?

Редактировать: причина в том, что я хочу дождаться нескольких из них.

Комментарии:

1. Is there any way to wrap a task around a INotifyCompletion , да, но вы хотите обернуть все задачи в a INotifyCompletion ; в основном, когда все задачи выполнены, а затем уведомить?

2. Нет. Я в принципе хочу иметь возможность смешивать и сопоставлять INotifyCompletion задачи и задачи в Task.WhenAll вызове.

3. Может быть, использовать TaskCompletionSource ?

Ответ №1:

Отвечая на мой собственный вопрос. Я решил это, добавив следующий метод в свой класс, в котором есть GetAwaiter метод.

 public async Task GetTask() {
    await this;
}
  

Тогда я могу позвонить Task.WhenAll(myCustomAwaitableObject.GetTask()) .