メソッドの実行が完了して別のスレッドで再起動するのに 2 秒以上かかる場合は、メソッドの実行をキャンセルする必要があります。
それで、方法/コールバックメカニズム/ハックはありますか?メソッドに2秒の制限時間を超えたことを通知させることができますか?
メソッドの実行が完了して別のスレッドで再起動するのに 2 秒以上かかる場合は、メソッドの実行をキャンセルする必要があります。
それで、方法/コールバックメカニズム/ハックはありますか?メソッドに2秒の制限時間を超えたことを通知させることができますか?
C# でタイムアウトのあるネットワーク ドライブが存在するかどうかを確認します。
-時間
非同期パターン:
public static T SafeLimex<T>(Func<T> F, int Timeout, out bool Completed)
{
var iar = F.BeginInvoke(null, new object());
if (iar.AsyncWaitHandle.WaitOne(Timeout))
{
Completed = true;
return F.EndInvoke(iar);
}
F.EndInvoke(iar); //not calling EndInvoke will result in a memory leak
Completed = false;
return default(T);
}
System.Threading.Timer を 2 秒で作成し、別のスレッドでメソッドを実行して、そこからのコールバックを待機する必要があります。タイマーが実行される前にメソッドが完了する場合は、タイマーを破棄する必要があります。それ以外の場合は、メソッドが実行されているスレッドを中止する必要があります。たとえば、これは非常に簡単です
using (new Timer(BreakFunction, true, TimeSpan.FromMinutes(2), Timeout.Infinite))
{
//TODO:here you should create another thread that will run your method
}
BreakFunction では、メソッドを実行するスレッドを中止する必要があります
見つけられると良いですね。私も探してきました。
私が通常行うことは、メソッドを別Thread
の で開始しTimer
、この場合は 2 秒で開始することです。初めてイベントを発生させるときは、次のようにします。
if (a.IsAlive)
{
a.Abort();
}
2 つの重要なこと:
Thread
ものは、タイマーを処理するメソッドによって表示される必要がありますAbort()
とThreadAbortExceptionが発生するため、メソッド内で適切に処理する必要があります。