假设,我有一个简单的类,其中包含异步方法:
public class Writer
{
public Task WriteAsync(string message);
}
这是内部类,对于应用程序的业务逻辑来说绝对可以忽略不计。
该方法的主要思想是,当它被调用时 -方法必须立即将控制权返回给调用方法,以避免在重要的、充满业务逻辑的调用方法中出现任何可能的延迟(调用该方法的延迟当然是可能的)。
这个方法在不同的地方调用,非常频繁。并且我们并不真正关心它是否成功或在出现意外情况时不会写入最后一条消息。没关系。
所以,问题是,我如何调用WriteAsync
以避免调用方法中的任何可能的延迟?
我想过Task.Run(() => WriteAsync(message))
(没有await
!我们不需要等待这个!),但这不会用很多无用的工作填满我的线程池吗?而且到处写这样的代码是相当繁重的......
您可以在专用后台线程上对写入进行排队并处理该队列,即执行写入。这就是调用 时会发生的情况Task.Run
,即您在线程池中排队委托。如果您需要更多控制,例如可以使用BlockingCollection<T>
.
有一个示例说明如何使用 aBlockingCollection<T>
来同时读取和写入MSDN 上可用的项目。
使用这种方法,调用WriteAsync
只会阻塞将消息添加到队列所需的时间,这个时间应该可以忽略不计。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句