gpt4 book ai didi

c# - BeginFlush 似乎同步工作

转载 作者:太空宇宙 更新时间:2023-11-03 20:01:14 25 4
gpt4 key购买 nike

我正在尝试使用 HttpResponse BeginFlush 和 EndFlush 方法来使刷新异步,这意味着我的工作线程在刷新到流时不会被使用。

但是,BeginFlush 方法似乎总是以同步方式运行。我深入研究了 Microsoft 引用代码,但没有找到此行为的原因。这是 Microsoft 实现:http://referencesource.microsoft.com/#System.Web/HttpResponse.cs,f121c649c992c407

我检查了 SupportsAsyncFlush 标志,我得到了 true ,所以我的环境实际上支持 AsyncFlush。

有什么想法吗?

这是一个尝试执行异步刷新的代码片段,但我没有进入“不同线程”行 - 它始终是运行此代码的同一个线程。

        Context.Response.Write("Some message");
Context.Response.BeginFlush(
res =>
{
try
{
var previousThreadId = (int)res.AsyncState;
var thread2Id = Thread.CurrentThread.ManagedThreadId;
if (previousThreadId != thread2Id)
{
Console.WriteLine("Different Threads");
}

Context.Response.EndFlush(res);
}
catch (Exception e)
{
}
},
Thread.CurrentThread.ManagedThreadId);

最佳答案

代码是异步,但不是多线程。您正在定义回调;一种将在未来冲洗完成时在某个不确定的时间点运行的方法。这并不一定意味着它将在另一个线程上运行。

在 .NET 中也有许多抽象功能的实现,其中行为被定义为异步,但实现是同步的,因为特定实现期望运行得如此之快以致于不保证异步。对于相当一部分 .NET 的文件 IO 来说是这样。如果您使用的编写器希望能够非常快速地刷新缓冲区,则它可能不会费心异步执行此操作。

关于c# - BeginFlush 似乎同步工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28070767/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com