C# 5 での async await の統合は初めてです。async await と TPL を調査するために、いくつかの基本的な Task ベースのメソッドを使用しています。以下の例では、5 秒のタイムアウトで Web サービスを呼び出しています。タイムアウトが切れた場合は例外をスローする必要があるため、メソッドから false を返すことができます。ただし、タイムアウトは発生しないか、発生してもタスクが返されません。
public static Task<bool> IsConnectedAsync()
{
return Task.Run(() =>
{
try
{
using (WSAppService.AppService svc = new NCSoftware.Common.WSAppService.AppService(GetServiceUrl(WebService.app)){Timeout = 5000})
{
return svc.PingB();
}
}
catch (Exception ex)
{
Logger.LogException(ex.Message, ex, "IsConnectedAsync");
}
return false;
});
}
タイムアウトが発生した場合、または例外が発生した場合でも、タスクが返されるように、これを適切に処理する方法を教えてください。