私は現在、画像をダウンロードするインスタンスメソッドで使用されるHttpClient
のインスタンス変数を持っています。このメソッドは常にTask.Run()
で呼び出されます。 このメソッドは、1分に何千回も呼び出すことができ、クラッシュしたりエラーを生成したりすることはありません。しかし、もし私がstatic HttpClient
に切り替えるとどんな利点があるのか知りたかったのですが、おそらくスレッドセーフではありません。あなたがasync
バージョンを使用していないし、あなたが最も可能性の高いデッドロックになってしまいますReadAsByteArrayAsync().Result
を呼び出しているので再利用可能なHttpClientインスタンスと静的変数(複数のスレッドで頻繁に使用される)?
HttpClient client = new HttpClient(); // Make this static?
// Always called in a Task.Run(() => DownloadImage(Obj));
public async void DownloadImage(Object obj)
{
FormUrlEncodedContent formContent = GetFormContent(Obj);
HttpResponseMessage Result = await client.PostAsync("URL", formContent).ConfigureAwait(false);
byte[] Data = Result.Content.ReadAsByteArrayAsync().Result;
StaticClass.Images[Obj.ID] = ImageSource.FromStream(() => new MemoryStream(Data));
formContent.Dispose();
Result.Dispose();
}
このコードがあるクラスの同じインスタンスで 'DownloadImage'が呼び出されている場合、違いはありません – Jonesopolis
@Jonesopolisそうです。 –
しばしば再利用される静的なHttpClientを作成するのが適切なときは誰にも分かりますか?この記事では、次のように推奨しています。https://aspnetmonsters.com/2016/08/2016-08-27-httpclientwrong/ –