我有以下代码,它异步调用 WCF 服务:
var client = new MyServiceClient();
Task.Factory.FromAsync(client.BeginDo, client.EndDo, request, null).ContinueWith(t => {
//process t.Result
});
在这种情况下,处置服务客户端实例的最佳方式是什么?
我有以下代码,它异步调用 WCF 服务:
var client = new MyServiceClient();
Task.Factory.FromAsync(client.BeginDo, client.EndDo, request, null).ContinueWith(t => {
//process t.Result
});
在这种情况下,处置服务客户端实例的最佳方式是什么?
要考虑的两种变体。两者都应该放在延续块的开头。
1.
try
{
client.Close();
}
catch (CommunicationException e)
{
client.Abort();
}
catch (TimeoutException e)
{
client.Abort();
}
catch (Exception e)
{
client.Abort();
throw;
}
2.
if (client.State == CommunicationState.Faulted)
client.Abort();
else
client.Close();