我有一些调试方法的 wcf 服务:
public Result DebugMethod(TimeSpan time){
Thread.Sleep(time);
return new Result { Code = new Random().Next()};
}
我想测试同步和异步调用之间的性能。
我将 Result 打包到 Response 类中,该类有互斥锁等待结果:
class Response {
public Result result;
bool loaded = false;
public ManualResetEvent _wait = new ManualResetEvent(false);
public Result get(){
if(!loaded){
_wait.WaitOne();
loaded = true;
}
return result;
}
还有我的 DebugMethodCompleted 事件:
//r - correct response structure, result - wcf response
r.result = result
r._wait.Set();
我调用 DebugMethodAsync 10 次,每次 TimeSpan = 1 秒。然后,在所有异步调用之后,我正在检查结果(只是为了等待它们)。
所以我认为大约需要1秒。但始终需要 5 秒。
如果我将调用次数更改为 n,则需要 n/2 秒才能获得所有响应,就像有时可能只是异步任务处理一样。
编辑:似乎客户端应用程序中的所有异步调用都已进行,但服务器同时处理多达 2 个(来自一个客户端)。
所以:客户端进行了 4 次异步调用并正在等待结果,服务器正在处理前两个,然后,在 1 秒之后,第三个来回。