这种模式有多糟糕?

Dan*_*fer 0 c# design-patterns asynchronous

当我需要控制各种异步操作需要多长时间时,我一直在使用这种模式.我并不是专门针对WebRequest(我知道你可以设置超时属性),我只是用它作为模式的一个例子.

        var request = WebRequest.Create(someUri);

        WebResponse response = null;
        request.BeginGetResponse(result =>
            {
                var asyncRequest = (WebRequest)result.AsyncState;
                response = asyncRequest.EndGetResponse(result);
            }, request);

        DateTime timeout = DateTime.Now.AddSeconds(10);
        while (response == null && DateTime.Now <= timeout)
        {
            Thread.Sleep(0);
        }
        if (response == null) throw new Exception("Timeout!");
Run Code Online (Sandbox Code Playgroud)

我读到Thread.Sleep()的任何地方,我都知道这是一个很好的事情,但我并不认为这个用例会滥用它.

我知道它有可能超过10秒,但这对我来说并不重要.

那么,这是否真的是一种完成我正在完成的事情的坏方法,如果是这样,那么更好的方法是什么呢?

编辑:也许我应该澄清我想要完成的事情.

目的是控制等待呼叫所花费的最长时间.我知道这会破坏异步调用的目的,但意图永远不是异步的,我只是用它来控制退出调用的方法.

Pat*_*gne 6

WaitHandles等待方法支持超时,使用它.就像是:

  var asyncResult = request.BeginGetResponse(...
  asyncResult.AsyncWaitHandle.WaitOne(TimeSpan.FromSeconds(10))
Run Code Online (Sandbox Code Playgroud)