Felsökning.Utilities.Reentrants 0.0.3-beta

An assembly containing class[es] for managing and using singleton instances of reentrant objects.

This is a prerelease version of Felsökning.Utilities.Reentrants.
Install-Package Felsökning.Utilities.Reentrants -Version 0.0.3-beta
dotnet add package Felsökning.Utilities.Reentrants --version 0.0.3-beta
<PackageReference Include="Felsökning.Utilities.Reentrants" Version="0.0.3-beta" />
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add Felsökning.Utilities.Reentrants --version 0.0.3-beta
The NuGet Team does not provide support for this client. Please contact its maintainers for support.

Initial release includes a class called ReentrantHttpClient. You can use this class to avail of a singleton instance of the HttpClient object, to conserve resources. Further information on why HttpClient is a special case can be found in these locations:

https://aspnetmonsters.com/2016/08/2016-08-27-httpclientwrong/
https://mobtowers.com/2017/12/15/httpclient-for-high-throughput-applications/

Sample use:

using (ReentrantHttpClient newClient = new ReentrantHttpClient(hostname: "https://www.linkedin.com/li/track"))
{
    int[] x = new int[10];
    for(int i = 0; i < 10; i++)
    {
                    x.SetValue(value: i, index: i);
    }

    newClient.SetAcceptApplicationJsonHeaders();

    Parallel.ForEach(
       x,
       obj =>
      {
           Stopwatch stopWatch = new Stopwatch();
           stopWatch.Start();
           Console.WriteLine(value: $"Thread {obj} has started and is waiting to check out the client.");
           newClient.WaitForCheckOut();

           Console.WriteLine(value: $"Thread {obj} has receieved the HttpClient and took {stopWatch.Elapsed}.");

           string response = newClient.WaitForAsyncString().Result;
           Console.WriteLine($"Thread {obj} has received {response} from LinkedIn.");

           Console.WriteLine($"Thread {obj} is sleeping for 2 seconds...");
           Thread.Sleep((int)TimeSpan.FromSeconds(2).TotalMilliseconds);

           Console.WriteLine(value: $"Thread {obj} is checking-in the client.");
           newClient.CheckIn();
      });

    x = null;
}

Console.ReadLine();

Initial release includes a class called ReentrantHttpClient. You can use this class to avail of a singleton instance of the HttpClient object, to conserve resources. Further information on why HttpClient is a special case can be found in these locations:

https://aspnetmonsters.com/2016/08/2016-08-27-httpclientwrong/
https://mobtowers.com/2017/12/15/httpclient-for-high-throughput-applications/

Sample use:

using (ReentrantHttpClient newClient = new ReentrantHttpClient(hostname: "https://www.linkedin.com/li/track"))
{
    int[] x = new int[10];
    for(int i = 0; i < 10; i++)
    {
                    x.SetValue(value: i, index: i);
    }

    newClient.SetAcceptApplicationJsonHeaders();

    Parallel.ForEach(
       x,
       obj =>
      {
           Stopwatch stopWatch = new Stopwatch();
           stopWatch.Start();
           Console.WriteLine(value: $"Thread {obj} has started and is waiting to check out the client.");
           newClient.WaitForCheckOut();

           Console.WriteLine(value: $"Thread {obj} has receieved the HttpClient and took {stopWatch.Elapsed}.");

           string response = newClient.WaitForAsyncString().Result;
           Console.WriteLine($"Thread {obj} has received {response} from LinkedIn.");

           Console.WriteLine($"Thread {obj} is sleeping for 2 seconds...");
           Thread.Sleep((int)TimeSpan.FromSeconds(2).TotalMilliseconds);

           Console.WriteLine(value: $"Thread {obj} is checking-in the client.");
           newClient.CheckIn();
      });

    x = null;
}

Console.ReadLine();

Release Notes

Expanded to include more of the .NETs.

  • .NETCoreApp 1.0

  • .NETCoreApp 1.1

  • .NETCoreApp 2.0

    • No dependencies.
  • .NETCoreApp 2.1

    • No dependencies.
  • .NETFramework 4.5

    • No dependencies.
  • .NETFramework 4.5.1

    • No dependencies.
  • .NETFramework 4.5.2

    • No dependencies.
  • .NETFramework 4.6

    • No dependencies.
  • .NETFramework 4.6.1

    • No dependencies.
  • .NETFramework 4.6.2

    • No dependencies.
  • .NETFramework 4.7

    • No dependencies.
  • .NETFramework 4.7.1

    • No dependencies.
  • .NETFramework 4.7.2

    • No dependencies.
  • .NETFramework 4.8

    • No dependencies.
  • .NETStandard 1.1

  • .NETStandard 1.2

  • .NETStandard 1.3

  • .NETStandard 1.4

  • .NETStandard 1.5

  • .NETStandard 1.6

  • .NETStandard 2.0

    • No dependencies.

This package is not used by any popular GitHub repositories.

Version History

Version Downloads Last updated
0.0.3-beta 36 6/22/2019