I am implementing a new feature in already existing application and would like to know how best I can achieve the following:
I have the solution of #1 to #3 but #4.
List<Task> tasks = new List<Task>(length);
tasks.Add(CreateTask(get_data_source));
await Task.WhenAny(tasks);
I don't want to provide any timeout in #3. But I would like to wait till the completion of a task and then trigger a timer for t seconds. After t seconds, return the result (if both completed, then both else just the completed task).
After first task complete, you can await for any of remaining tasks or delay task to complete .
This will give you possibility to await 5 seconds for other tasks to complete, if not, then return result.
var tasks = new List<Task>
{
CreateTask(get_data_source),
CreateTask(get_data_source2)
};
var completedTask = await Task.WhenAny(tasks);
await Task.WhenAny(Task.WhenAll(tasks), Task.Delay(5000));
// Return result