相关疑难解决方法(0)

AspNetSynchronizationContext并等待ASP.NET中的延续

await内部异步ASP.NET Web API控制器方法之后,我注意到一个意外的(我会说,一个冗余的)线程切换.

例如,下面我希望ManagedThreadId在#2和3#的位置看到相同的内容,但最常见的是我在#3看到一个不同的主题:

public class TestController : ApiController
{
    public async Task<string> GetData()
    {
        Debug.WriteLine(new
        {
            where = "1) before await",
            thread = Thread.CurrentThread.ManagedThreadId,
            context = SynchronizationContext.Current
        });

        await Task.Delay(100).ContinueWith(t =>
        {
            Debug.WriteLine(new
            {
                where = "2) inside ContinueWith",
                thread = Thread.CurrentThread.ManagedThreadId,
                context = SynchronizationContext.Current
            });
        }, TaskContinuationOptions.ExecuteSynchronously); //.ConfigureAwait(false);

        Debug.WriteLine(new
        {
            where = "3) after await",
            thread = Thread.CurrentThread.ManagedThreadId,
            context = SynchronizationContext.Current
        });

        return "OK";
    }
}
Run Code Online (Sandbox Code Playgroud)

我已经看过了实现AspNetSynchronizationContext.Post,基本上归结为:

Task newTask = _lastScheduledTask.ContinueWith(_ => …
Run Code Online (Sandbox Code Playgroud)

.net c# asp.net task-parallel-library async-await

10
推荐指数
1
解决办法
3115
查看次数

标签 统计

.net ×1

asp.net ×1

async-await ×1

c# ×1

task-parallel-library ×1