C# .NET6 マルチスレッド時のHTTP通信(HttpClient)

実現したいこと

StartでHTTP通信を10秒間隔で処理するスレッドを起動しているが、2つ以上スレッドが起動したら”失敗”となってしまうので、エラーをなくしたい。

発生している問題・分からないこと

並列でHTTP通信(スレッド毎に通信セッションを独立)を実現したいのですが、方法が分かりません。

該当のソースコード

public partial class Main : Form { private readonly CancellationTokenSource[] token = new CancellationTokenSource[5]; private void Start(object sender, EventArgs e) { try { if (token[m_Index] == null) { token[m_Index] = new CancellationTokenSource(); } CancellationTokenSource token = token[m_Index]; ThreadHttp(token, m_Index); } catch (Exception ex) { // 省略 } } private void ThreadHttp(CancellationTokenSource token, int index) { Thread thread = new Thread(() => { string url = "https://xxxxxxxxxx" while (!token.IsCancellationRequested) { if (OrgHttp.Get(url)) { Debug.WriteLine($"成功"); } else { Debug.WriteLine($"失敗"); } Thread.Sleep(10000); } }); thread.Start(); } } public static class OrgHttp { public static bool Get(string url) { using HttpClient httpClient = new HttpClient(); HttpRequestMessage request = new HttpRequestMessage { Method = HttpMethod.Get, RequestUri = new Uri(url), }; HttpResponseMessage result = httpClient.SendAsync(request).Result;   // 省略 } }

試したこと・調べたこと

上記の詳細・結果

試しにSemaphoreSlim(maxCount 1)でGet()処理を囲むと"成功"となります。

補足

public static class OrgHttpは変更せずに対策をしたいです

コメントを投稿

0 コメント