Как я могу назначить собственное продолжение каждой задаче в async/await maneer без того, чтобы одна из них ждала других ?
Привет,
Моя проблема заключается в следующем :
У меня есть n задач, которые выполняются параллельно.
Я хочу, чтобы каждая задача имела свое собственное продолжение, которое использует результат. (Подумайте об обновлении пользовательского интерфейса для каждой завершенной задачи)
Если бы я использовал только задачу Framework 4.0, я бы использовал ContinueWith для каждой задачи.
Но я хочу использовать await / async , и я не нахожу способа сделать что-то после завершения каждой задачи, не ожидая друг друга.
Пример кода для преобразования :
public async void MainMethod() { var doSomething = DoSomething(); var doSomethingElse = DoSomethingElse(); var doSomethingDifferent = DoSomethingDifferent(); //These three continuations do not interfer with each other. doSomething.ContinueWith(task => ReactToDoSomething(task.Result)); doSomethingElse.ContinueWith(task => ReactToDoSomethingElse(task.Result)); doSomethingDifferent.ContinueWith(task=>ReactToDoSomethingDifferent(task.Result)); } public Task<int> DoSomething() { return Task.FromResult(1); } public Task<int> DoSomethingElse() { return Task.FromResult(2); } public Task<int> DoSomethingDifferent() { return Task.FromResult(3); } ///The code of the react methods must not change. public void ReactToDoSomething(int i) { //Update a part of UI } public void ReactToDoSomethingElse(int i) { //Update a part of UI } public void ReactToDoSomethingDifferent(int i) { //Update a part of UI } }
Спасибо за вашу помощь.
Что я уже пробовал:
Сначала моя идея состояла в том, чтобы заменить код методов React, но потом пришло, что это ограничение : не меняйте эту часть кода. (Используется где-то еще)
И все же вот что я сделал :
public class MyClass { public async void MainMethod() { var doSomething = DoSomething(); var doSomethingElse = DoSomethingElse(); var doSomethingDifferent = DoSomethingDifferent(); //These three continuations do not interfer with each other. ReactToDoSomething(doSomething); ReactToDoSomethingElse(doSomethingElse); ReactToDoSomethingDifferent(doSomethingDifferent); } public Task<int> DoSomething() { return Task.FromResult(1); } public Task<int> DoSomethingElse() { return Task.FromResult(2); } public Task<int> DoSomethingDifferent() { return Task.FromResult(3); } //Changed React methods but must not, and this is my issue. public async Task ReactToDoSomething(Task<int> task) { //Update a part of UI } public async void ReactToDoSomethingElse(Task<int> task) { //Update a part of UI } public async void ReactToDoSomethingDifferent(Task<int> task) { //Update a part of UI } }