I have a collection of Task<string>. I'd like to get the return value of a Task that first returns a non-null value.
If I use Task.WhenAny, I can get the return value of the Task that first completed its execution, but it's impossible to exclude null values.
private static async Task<string> FirstRespondingTaskAsync(IEnumerable<Task<string>> tasks)
{
var completedTask = await Task.WhenAny(tasks);
var data = await completedTask;
// data can be null, which I'd like to exclude
return data;
}
If I use Task.WhenAll, it's possible to exclude null values, but I have to wait for all tasks to complete its execution.
private static async Task<string> FirstNonNullTaskAsync(IEnumerable<Task<string>> tasks)
{
var all = await Task.WhenAll(tasks);
// I have to wait until all tasks complete
var data = all.FirstOrDefault(s => s != null);
return data;
}
How can I get the first value that satisfies a specific condition out of multiple tasks?