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秒,但这对我来说并不重要.
那么,这是否真的是一种完成我正在完成的事情的坏方法,如果是这样,那么更好的方法是什么呢?
编辑:也许我应该澄清我想要完成的事情.
目的是控制等待呼叫所花费的最长时间.我知道这会破坏异步调用的目的,但意图永远不是异步的,我只是用它来控制退出调用的方法.
WaitHandles等待方法支持超时,使用它.就像是:
var asyncResult = request.BeginGetResponse(...
asyncResult.AsyncWaitHandle.WaitOne(TimeSpan.FromSeconds(10))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
339 次 |
| 最近记录: |