私は、Webサービスから情報を取得しようとするクラス数回を持っている:停止メソッドの実行
public TResult Try(Func<TResult> func, int maxRetries)
{
TResult returnValue = default(TResult);
int numTries = 0;
bool succeeded = false;
while (numTries < maxRetries)
{
try
{
returnValue = func();
succeeded = true;
}
catch (Exception ex)
{
Log(ex,numTries);
}
finally
{
numTries++;
}
if (succeeded)
{
return returnValue;
}
else
{
if (numTries == maxRetries)
{
//ask user what to do
}
}
}
今後の利用者、彼は継続したい場合は選択したことができるようになります「(numTries == MaxRetriesのは)が」 Webサービスからデータを取得しようとするか、キャンセルします。 上記のメソッドを呼び出したメソッドの実行を中止して実行を停止すると、新しいフォームを開くだけです。このオブジェクトを実行するメソッドが動作し続け、多くの場合問題が発生するため、nullまたは新しいオブジェクトを返すだけではありません。
だから、基本的に、これは次のようになります。返される値は以下のようにヌルだった場合
someValue = retry.Try(() => webService.method(),maxRetries));
//if user canceled after app wasn't able to get data stop execution as already another form is opened
私は可能性があり、もちろんチェックの:
someValue = retry.Try(()=>webService.method(),maxRetries));
if (someValue == null)
return;
しかし、これはコードの変更の多くを意味し、Iだろうそれを避けたいと思って、私はそれをTryメソッドからやることができれば最高です。