ProcessAsyncが現在実行中のASP.NET Webサーバースレッドプールの作業を外していることを示すために、デモンストレーションをまとめようとしています。私は気象サービスを呼び出す簡単な例を書いた。残念ながら、threadIdは変更されません。ASP.NETコアでスレッドの変更を強制する方法タグヘルパーのProcessAsync
私は理解できない場合があります。したがって、2つの質問:
1:これを正しく実行していますか?ThreadIdBeforeとThreadIdAfterは異なるはずですか?
2:これを正しく行っていると仮定すると、デモに新しいスレッドIDを表示させるためにできることはありますか?
namespace WebAppTagHelper.TagHelpers
{
public class MyTestTagHelper : TagHelper
{
private static HttpClient _httpClient = new HttpClient();
string requestUrl = "http://samples.openweathermap.org/data/2.5/weather?lat=35&lon=139&appid=b1b15e88fa797225412429c1c50c122a1";
public override async Task ProcessAsync(
TagHelperContext context, TagHelperOutput output)
{
var threadIdBefore = Thread.CurrentThread.ManagedThreadId;
var uri = new Uri(requestUrl);
using (var response = await _httpClient.GetAsync(uri))
{
response.EnsureSuccessStatusCode();
var result = await response.Content.ReadAsStringAsync();
JObject json = JObject.Parse(result);
if (result != null)
{
output.Attributes.Add("class", "highlight");
var threadIdAfter = Thread.CurrentThread.ManagedThreadId;
output.Content.SetHtmlContent(
string.Format("<b>Thread ID Before: {0} After: {1}</b>", threadIdBefore, threadIdAfter));
}
}
}
}
}
非同期メソッドは、使用可能な最初のスレッドで実行を継続しますが、最初のスレッドは同じになっています。複数のリクエストを同時に送信することで、これを実現できます。 – Fabio