3

そのようなシステムはないと思いますが、お願いします。

基本的に、将来のある時点(通常は数秒以内、場合によっては数分後)に実行するタスクをスケジュールし、手遅れにならない限り、その要求をキャンセルする方法を用意する必要があります。

つまり。次のようなコード:

var x = Scheduler.Schedule(() => SomethingSomething(), TimeSpan.FromSeconds(5));
...
x.Dispose(); // cancels the request

.NETにそのようなシステムはありますか?TPLに私を助けることができるものはありますか?

ここでは、システム内のさまざまなインスタンスからそのようなfuture-actionsを実行する必要があります。むしろ、そのような各クラスインスタンスが独自のスレッドを持ち、これを処理することを避けたいと思います。

また、これ(または同様のタスクなど)は必要ないことに注意してください。

new Thread(new ThreadStart(() =>
{
    Thread.Sleep(5000);
    SomethingSomething();
})).Start();

実行するそのようなタスクがいくつかある可能性があり、期限が近いことを除いて、特定の順序で実行する必要はありません。また、リアルタイムのパフォーマンスの概念のようなものを持っていることは重要ではありません。そのようなアクションごとに個別のスレッドをスピンアップすることは避けたいだけです。

4

6 に答える 6

5

外部参照は必要ないため、、、System.Threading.Timerまたはを確認することをお勧めしますSystem.Timers.Timer。これらのクラスは、WinFormsタイマーコンポーネントとは技術的に非常に異なることに注意してください。

于 2010-06-02T13:36:40.337 に答える
3

quartz.net(オープンソース)を使用してください。

于 2010-06-02T13:27:55.330 に答える
3

ええと.....実際にあなたはあなたが尋ねたことを正確に行うことができます....

  IDisposable kill = null;

  kill = Scheduler.TaskPool.Schedule(() => DoSomething(), dueTime);

  kill.Dispose();

Microsoftの仲間からのRxReactiveFrameworkの使用:)

Rxは非常に素晴らしいです。イベントをほとんど置き換えました。ただ美味しいです...

こんにちは私はさびています私はRx中毒です...そして私はそれが好きです。

于 2010-06-05T21:36:20.127 に答える
1

.NETに明示的に組み込まれていませんが、Windowsのスケジュールされたタスクを介してスケジュールできるEXEを作成することを検討しましたか?.NETを使用している場合は、おそらくWindowsを使用しているでしょう。これは、スケジュールされたタスクの目的とまったく同じではありませんか?

スケジュールされたタスクを.NETソリューションに統合する方法はわかりませんが、スケジュールされたタスクから呼び出されるコンポーネントを作成することはできます。

于 2010-06-02T13:37:34.390 に答える
1

.NET 4を使用する場合は、新しいSystem.Threading.Tasksを使用して、タスクのカスタムスケジューラを作成できます。あまり詳しく調べていませんが、独自のスケジューラーを派生させて、適切と思われるタスクを実行させることができるようです。

于 2010-06-05T22:05:59.340 に答える
0

提供された回答に加えて、これはスレッドプールを使用して実行することもできます。

public static RegisteredWaitHandle Schedule(Action action, TimeSpan dueTime)
{
    var handle = new ManualResetEvent(false);
    return ThreadPool.RegisterWaitForSingleObject(
                                         handle, 
                                         (s, t) =>
                                         {
                                             action();
                                             handle.Dispose();
                                         }, 
                                         null, 
                                         (int) dueTime.TotalMilliseconds, true);
}

にはRegisteredWaitHandle、リクエストをキャンセルするために使用できるUnregisterメソッドがあります

于 2011-02-01T19:08:39.237 に答える