gpt4 book ai didi

c# - 调用 C# 的 await 的 .NET Windows 服务中的 I/O 回调是否可能不阻塞?

转载 作者:行者123 更新时间:2023-11-30 17:49:43 28 4
gpt4 key购买 nike

我知道在 ASP.NET 中,当 I/O 在后台发生时使用 await 时,工作线程会返回到池中,这对于可伸缩性来说非常好。

我的 Windows 服务是一个套接字服务器,它使用 Begin/End 风格的异步套接字 I/O。混合我的魔法,我知道。我在 EndRead 回调中,收到工作请求。我不希望使回调发生阻塞的线程。

我正在使用 Nito.AsyncEx 库,使用 AsyncContext.Run(() => DoMyBiddingHopefullyInTheBackground(...))...

private void EndRead(IAsyncResult result)
{
int nRead = m_socketStream.EndRead(result);
...
AsyncContext.Run(() => DoMyBiddingHopefullyInTheBackground(...))
}

private async Task DoMyBiddingHopefullyInTheBackground(...)
{
await DoSomeAsyncIoWork();
}

使用 AsyncContext 是我能找到的让非异步标记代码调用使用 await 的异步标记代码的唯一方法。

AsyncContext.Run 会阻塞调用我的套接字结束回调例程的线程吗?如果是这样,是否有任何方法可以使该线程在异步/等待 I/O 期间返回到线程池?

最佳答案

如果你想运行一个async方法并且你不想等待它完成,试试这个:

Task.Run(() => DoMyBiddingInTheBackground());

关于c# - 调用 C# 的 await 的 .NET Windows 服务中的 I/O 回调是否可能不阻塞?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21338300/

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