私はこの方法でチャンネルの閉鎖と中止を処理してきました:
public async Task<MyDataContract> GetDataFromService()
{
IClientChannel channel = null;
try
{
IMyContract contract = factory.CreateChannel(address);
MyDataContract returnValue = await player.GetMyDataAsync();
channel = (IClientChannel);
return returnValue;
}
catch (CommunicationException)
{
// ex handling code
}
finally
{
if (channel != null)
{
if (channel.State == CommunicationState.Faulted)
{
channel.Abort();
}
else
{
channel.Close();
}
}
}
}
1 つのスレッドだけがチャネルを使用するとします。状態を確認した直後に、チャネルに障害が発生しないことをどのように確認できますか? そのようなことが起こった場合、コードは Close() を試行し、Close() は finally ブロックで例外をスローします。これが安全/安全ではない理由と、より安全でより良い方法の例についての説明をいただければ幸いです。