Task, Task<TResult>, ValueTask, and ValueTask<TResult>
Progress reporting
public Task<ReadOnlyCollection<FileInfo>> FindFilesAsync(
string pattern,
IProgress<Tuple<double,
ReadOnlyCollection<List<FileInfo>>>> progress)
public Task MethodNameAsync(…,
CancellationToken cancellationToken, IProgress<T> progress);
// WhenAll: downloading multiple files from the web asynchronously
Task<string> [] asyncOps =
(from url in urls select DownloadStringTaskAsync(url)).ToArray();
try
{
string [] pages = await Task.WhenAll(asyncOps);
...
}
catch(Exception exc)
{
foreach(Task<string> faulted in asyncOps.Where(t => t.IsFaulted))
{
… // work with faulted and faulted.Exception
}
}