当前位置:  开发笔记 > 编程语言 > 正文

这种模式有多糟糕?

如何解决《这种模式有多糟糕?》经验,为你挑选了1个好方法。

当我需要控制各种异步操作需要多长时间时,我一直在使用这种模式.我并不是专门针对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!");

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

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

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

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

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



1> Patrik Hägne..:

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

  var asyncResult = request.BeginGetResponse(...
  asyncResult.AsyncWaitHandle.WaitOne(TimeSpan.FromSeconds(10))

推荐阅读
大大炮
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有