长时间运行的异步操作,没有IO线程

时间:2013-04-30 18:28:54

标签: c# .net multithreading

启动高延迟异步IO操作(平均100ms-500ms)的最佳方法是什么,IO操作没有固有的APM或IO线程/完成端口支持?

我不希望线程池/工作线程在突发活动期间被这样的操作阻塞。

我的具体案例是ODP.NET。它(还没?)支持APM。 I see this answer for how to handle that case,但我很好奇这是否真的是解决这类问题的正确方法?我想这部分取决于the answer to this other question

2 个答案:

答案 0 :(得分:2)

如果IO操作没有固有的异步支持,并且只为它们的操作提供阻塞方法,那么你别无选择,只能创建一个新的线程或线程池线程,它就在那里等待它。

唯一的解决方法是让底层IO操作具有异步支持。

答案 1 :(得分:1)

如果绝对无法使用异步IO重写,那么您的最佳选择是

(a)ThreadPool但是如果你试图一次性租用太多线程,那么在创建额外的线程时它会变得迟缓。这反过来会影响使用ThreadPool ...计时器的任何其他东西的运行,那种东西......讨厌。

(b)使用您自己独立的threadpool-like解决方案,该方案不受此固有限制。

ThreadPool并不是真的用于阻止操作。如果您的担忧是切合实际的话,我会选择(b)。