MultiWait 1.1.1
See the version list below for details.
dotnet add package MultiWait --version 1.1.1
NuGet\Install-Package MultiWait -Version 1.1.1
<PackageReference Include="MultiWait" Version="1.1.1" />
<PackageVersion Include="MultiWait" Version="1.1.1" />
<PackageReference Include="MultiWait" />
paket add MultiWait --version 1.1.1
#r "nuget: MultiWait, 1.1.1"
#:package MultiWait@1.1.1
#addin nuget:?package=MultiWait&version=1.1.1
#tool nuget:?package=MultiWait&version=1.1.1
MultiWait
MultiWait addresses the ergonomic problem of handling multiple async requests simultaneously while still getting the best possible concurrency. Without MultiWait, you have to create temporary variables for all the in-flight tasks like this:
var userTask = GetUserByUserIdAsync(userId);
var userReposTask = GetUserReposByUserIdAsync(userId);
var userIssuesTask = GetUserIssuesByUserIdAsync(userId);
var userPRsTask = GetUserPullRequestsByUserIdAsync(userId);
var user = await userTask;
var userRepos = await userReposTask;
var userIssues = await userIssuesTask;
var userPRs = await userPRsTask;
But with MultiWait it can become this:
var (user, userRepos, userIssues, userPrs) = await
Tasks.WhenAll(
GetUserByUserIdAsync(userId),
GetUserReposByUserIdAsync(userId),
GetUserIssuesByUserIdAsync(userId),
GetUserPullRequestsByUserIdAsync(userId)
);
Installation
MultiWait requires .NET Standard 2.0 which allows it to run on the following runtimes:
- .NET Framework 4.6.1 or greater
- .NET Core 2.0 or greater
This package can be added to a project with NuGet by running:
Install-Package MultiWait -Source nuget.orgin Visual Studio NuGet Consoledotnet add package MultiWaiton your command line in a .NET Core project
Usage
Tasks.WhenAll
This method is the workhorse of this library, allowing you to await up to 16
concurrent tasks all of different types. This differs from
System.Threading.Tasks.Task.WhenAll<T>(T...) in two key ways: This method can
take arguments of different types (unlike T[]) and it cannot take a different
number of arguments at runtime (or even more than 16 at compile-time). The main
utility of this method is to allow you to await 2 or more tasks simultaneously
without creating temporary variables or spreading await through your whole
method.
var (x, y) = await Tasks.WhenAll(GetXAsync(), GetYAsync());
Tasks.WhenAny
This method is this library's analog to System.Threading.Tasks.WhenAny. It
allows you to wait for the first of a couple of tasks, getting the result of the
first and returning the default value for the others.
var (value, cache) = await Tasks.WhenAny(GetValueAsync(), GetCacheAsync());
if (value != null) return value;
return MapToValue(cache);
Tasks.WaitAll
This method is just like Tasks.WhenAll except that it waits the tasks, it
doesn't await them.
var (x, y) = Task.WaitAll(GetXAsync(), GetYAsync());
Tasks.WaitAny
This method is just like Tasks.WhenAny except that it waits the tasks, it
doesn't await them.
var (value, cache) = Tasks.WaitAny(GetValueAsync(), GetCacheAsync());
if (value != null) return value;
return MapToValue(cache);
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net5.0 was computed. net5.0-windows was computed. net6.0 was computed. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 was computed. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 was computed. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 was computed. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
| .NET Core | netcoreapp2.0 was computed. netcoreapp2.1 was computed. netcoreapp2.2 was computed. netcoreapp3.0 was computed. netcoreapp3.1 was computed. |
| .NET Standard | netstandard2.0 is compatible. netstandard2.1 was computed. |
| .NET Framework | net461 was computed. net462 was computed. net463 was computed. net47 was computed. net471 was computed. net472 was computed. net48 was computed. net481 was computed. |
| MonoAndroid | monoandroid was computed. |
| MonoMac | monomac was computed. |
| MonoTouch | monotouch was computed. |
| Tizen | tizen40 was computed. tizen60 was computed. |
| Xamarin.iOS | xamarinios was computed. |
| Xamarin.Mac | xamarinmac was computed. |
| Xamarin.TVOS | xamarintvos was computed. |
| Xamarin.WatchOS | xamarinwatchos was computed. |
-
.NETStandard 2.0
- No dependencies.
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.