0
私はSignalRクライアントバージョン2.2.0ナゲットを使用しています。C#SignalRクライアント
this._connection = new HubConnection(this._url);
this._connection.Closed += this.ConnectionOnClosed;
this._connection.Error += this.ConnectionOnError;
ServicePointManager.DefaultConnectionLimit = 250;
this._client = this._connection.CreateHubProxy(HubName);
this._connection.Start(new WebSocketTransport()).Wait();
それから私は、毎回(マルチスレッド)クライアントを再利用:
client.Invoke<bool>(nameof(this.AddIfNotExists), key, data, expireAfter)
Parallel.For(
0,
50000,
new ParallelOptions
{
MaxDegreeOfParallelism = 10,
},
async (i) =>
{
var result = await client.ExecuteDistributedAsync(
(i % 2).ToString(),
TimeSpan.FromSeconds(5),
async() =>
{
await Task.Delay(500);
return $"Done: {i} [{(i % 2)}]";
});
Console.WriteLine("--->" + (result ?? "TIMEOUT:" + i));
});
これは、ほとんどすぐに(第一addifnotexist作品をクラッシュし、次の8はクラッシュします)。どこからでも私が読んだことから、IHubProxyはスレッドセーフであるはずです... 何か提案がありますか?
私はこのライブラリを知らないが、私が知っているほとんどのWebクライアントはスレッドセーフではなく、ユーザーあたり1クライアントしかない。 – gismo
「IHubProxyはスレッドセーフであると考えられています」 - プルーフリンクはありますか? – Dennis
それは意味が分かりません。 connection.startが呼び出された後、新しいhubproxyを作成することはできません。これは、クライアントを使うたびにwebsocketが作成されることを意味します。そして、Webクライアントを使用できます。接続を開いたままにすると、より高速になるはずです。 – MrH40XX