APM,IAsyncResult模型(服务器端)数据库异步调用与线程池使用

时间:2014-01-18 12:38:20

标签: c# .net wcf asynchronous

这个问题涉及AMP(.Net< 4.5)请不要建议我使用TAP。我知道它。 但是试着理解这种实现的正确方法是什么,而且正在进行CLR。 我对Squrare Root有以下实现

public IAsyncResult BeginGetSquareRoot(double value, AsyncCallback callback, object state)
    {
        GetSquareRootAsyncResult asyncResult =
            new GetSquareRootAsyncResult(callback, state);
        asyncResult.Value = value;

        ThreadPool.QueueUserWorkItem(
            new WaitCallback((Callback)),
            asyncResult);

        return asyncResult;
    } 

现在我想为某些存储过程执行实现其他异步调用 我是否也应该使用带回调的线程池。或者我可以只调用BeginExecuteReader(AsyncCallback callback, object stateObject); 或者(如果我不使用ThreadPool)它可能只是打开太多线程并卡住系统?

1 个答案:

答案 0 :(得分:1)

使用线程池进行数据库工作是众所周知的异步同步反模式。始终使用异步IO。使用BeginExecuteReader因为这不会阻止线程。它运行时不需要线程。