Incendium.Result
1.0.0
See the version list below for details.
dotnet add package Incendium.Result --version 1.0.0
NuGet\Install-Package Incendium.Result -Version 1.0.0
<PackageReference Include="Incendium.Result" Version="1.0.0" />
paket add Incendium.Result --version 1.0.0
#r "nuget: Incendium.Result, 1.0.0"
// Install Incendium.Result as a Cake Addin #addin nuget:?package=Incendium.Result&version=1.0.0 // Install Incendium.Result as a Cake Tool #tool nuget:?package=Incendium.Result&version=1.0.0
Incendium
Incendium is a small set of useful cross-platform .NET standard 2.1 libraries for .NET developers.
Package | Description | Nuget |
---|---|---|
Incendium.Result | Contains Error , Result<T> and NullableResult<T> types which allows to return a success value or an error (something vaguely similar to the Rust style) |
<a href="https://www.nuget.org/packages/Incendium.Result/"><img src="https://img.shields.io/nuget/v/Incendium.Result"/></a><a href="https://www.nuget.org/packages/Incendium.Result/"><img src="https://img.shields.io/nuget/dt/Incendium.Result"/></a> |
Incendium.RetryPolicy | Provides RetryHttpClientHandler to easily retry HTTP requests in case of errors, as well as RateGate to control rate limiting |
<a href="https://www.nuget.org/packages/Incendium.RetryPolicy/"><img src="https://img.shields.io/nuget/v/Incendium.RetryPolicy"/></a><a href="https://www.nuget.org/packages/Incendium.RetryPolicy/"><img src="https://img.shields.io/nuget/dt/Incendium.RetryPolicy"/></a> |
Getting started
Installation
PM> Install-Package Incendium.Result
PM> Install-Package Incendium.RetryPolicy
Result<T>
and NullableResult<T>
The method can be synchronous or asynchronous and can return a value without explicitly creating a Result<T>
type:
public async Result<string> GetStringAsync() {
// ...
if (condition1) {
return "Test string result";
} else {
return new Error(code: 123, message: "Test error");
}
try {
// ...
} catch (Exception e) {
return new Error(code: 321, message: "Test error", exception: e);
}
}
Then processing the result might look like this:
var (str, error) = await GetStringAsync();
if (error != null) {
log.LogError(
error.Exception(),
"Error with code {@code} and message {@message}",
error.Code(),
error.Message());
}
RetryHttpClientHandler
Сan be used as a handler for HttpClient
and allows you to easily (compared to Polly) set up repeated requests in the following cases:
HttpNetworkException
- Server errors (
5xx
) - Request timeout error (
408
) - Too many requests (
429
)
and also allows you to configure rate limiting with exponential delays for outgoing requests using RateGate
:
var innerHttpClientHandler = new HttpClientHandler(); // can be easily mocked
var retryHttpClientHandler = new RetryHttpClientHandler(innerHttpClientHandler)
{
RetryCount = 5, // sets 5 retry attempts
RetryOnHttpRequestException = true, // sets the retry flag in case of an HttpRequestException
FirstRetryDelay = TimeSpan.FromMilliseconds(100), // sets the median starting delay between requests
RateGate = new RateGate(
occurrences: 10, // sets rate limit to 10 request per 60 seconds
timeUnit: TimeSpan.FromSeconds(60))
}
var httpClient = new HttpClient(retryHttpClientHandler);
There are several ready-made delay algorithms that can be used:
- Constant
- Exponential
- DecorrelatedJitterBackoffV2 (default)
var retryHttpClientHandler = new RetryHttpClientHandler(innerHttpClientHandler)
{
RetryDelaysFactory = () => Delays.Exponential(
firstDelay: TimeSpan.FromMilliseconds(100),
count: 10)
}
You can also pass your own delay algorithm in the RetryDelaysFactory
property, which should return IEnumerable<TimeSpan>
.
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. |
.NET Core | netcoreapp3.0 was computed. netcoreapp3.1 was computed. |
.NET Standard | netstandard2.1 is compatible. |
MonoAndroid | monoandroid was computed. |
MonoMac | monomac was computed. |
MonoTouch | monotouch was computed. |
Tizen | 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.1
- Microsoft.Extensions.Logging.Abstractions (>= 8.0.1)
NuGet packages (1)
Showing the top 1 NuGet packages that depend on Incendium.Result:
Package | Downloads |
---|---|
Revelium.Evm
Revelium.Evm is .NET integration library for Etherlink and EVM-compatible networks |
GitHub repositories
This package is not used by any popular GitHub repositories.