Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 给任务X完成时间的备选方案_C#_Multithreading - Fatal编程技术网

C# 给任务X完成时间的备选方案

C# 给任务X完成时间的备选方案,c#,multithreading,C#,Multithreading,通常情况下,我需要在X秒内完成一项任务,如果它没有完成,我想继续,处理其余的任务 我一直默认这样的东西: Thread worker = new Thread(() => { // do some long operation }); Thread monitor = new Thread(() => { Thread.Sleep(10000); if(worker != null && worker.IsAlive) { w

通常情况下,我需要在X秒内完成一项任务,如果它没有完成,我想继续,处理其余的任务

我一直默认这样的东西:

Thread worker = new Thread(() => {
    // do some long operation
});

Thread monitor = new Thread(() => {
    Thread.Sleep(10000);
    if(worker != null && worker.IsAlive) {
        worker.Abort();
        worker = null;
    }
    StartNextTask();
});

monitor.Start ();
worker.Start();
这是可行的,但它很麻烦,因为它使用两个线程(是的,您也可以使用
任务
类来使用线程池中的线程)

基于
AutoResetEvent
s和
event
的模型不能很好地工作,因为前者在工作线程完成之前阻塞监视器线程,而
事件驱动的方法依赖于客户端调用事件并通知监视器


是否有其他模式可以遵循相同的语义?

如果您像您所说的那样使用Task类,那么您也可以使用Task.Wait(),它完全满足您的需要。指定等待的秒数。除非使用CancellationToken取消任务,否则不会取消任务

见: