c# - 如何在 Tag Helper 的 ASP.NET Core ProcessAsync 中强制更改线程

标签 c# asp.net-core async-await tag-helpers

我试图将一个演示放在一起,以展示 ProcessAsync 将工作从当前正在运行的 ASP.NET Web 服务器线程池中移走。我写了一个调用天气服务的简短示例。不幸的是,threadId 没有改变。

我的理解是可能不会。那么,两个问题:

1:我这样做是否正确,我是否应该期望 ThreadIdBefore 和 ThreadIdAfter 应该/可能不同?

2:假设我这样做是正确的,我可以做些什么来让演示显示一个新的 threadId 吗?

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));

                }

            }

        }
    }

}

最佳答案

Am I doing this correctly and should I expect that ThreadIdBefore and ThreadIdAfter should/might be different?

没有。 “之前”和“之后”之间没有 await,因此不可能发生线程更改。

关于c# - 如何在 Tag Helper 的 ASP.NET Core ProcessAsync 中强制更改线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43284569/

相关文章:

javascript - 如何使用粗箭头表示法编写异步函数模块函数

c# - 如何解决错误CS1525无效表达词 '='?

javascript - 尝试循环 axios 请求并异步推送

c# - 返回键的Key Down事件不起作用

c# - 无法直观地更改继承形式的 DataGridView

c# - ASP.NET MVC - 附加类型为 'MODELNAME' 的实体失败,因为相同类型的另一个实体已经具有相同的主键值

c# - 非主键上的 Entity Framework 关系

c# - 在 ASP.NET Core ApiController 中区分显式 'null' 和 'not specified'

c# - 在 Startup 中将 ApplicationDbContext 注入(inject)到 Configure 方法中

C# HttpClient 跟踪卡住