Pau*_*oza 31 .net c# multithreading task task-parallel-library
我有一个任务,我希望它能在一秒钟内运行,但是如果需要的时间超过几秒钟,我想取消任务.
例如:
Task t = new Task(() =>
{
while (true)
{
Thread.Sleep(500);
}
});
t.Start();
t.Wait(3000);
Run Code Online (Sandbox Code Playgroud)
请注意,等待3000毫秒后,等待到期.超时到期或任务是否仍在运行时,任务是否被取消?
Nic*_*nko 52
Task.Wait()等待直至任务完成指定的时间和返回任务是否在指定的时间(或更早)或不量完成.任务本身不会被修改,也不依赖于等待.
阅读精彩系列:.NET中的并行性,.NET中的并行性 - 第10部分,PLEDQ中的取消和 Reed Copsey 的Parallel类
并且:.NET 4取消框架/ 并行编程:任务取消
检查以下代码:
var cts = new CancellationTokenSource();
var newTask = Task.Factory.StartNew(state =>
{
var token = (CancellationToken)state;
while (!token.IsCancellationRequested)
{
}
token.ThrowIfCancellationRequested();
}, cts.Token, cts.Token);
if (!newTask.Wait(3000, cts.Token)) cts.Cancel();
Run Code Online (Sandbox Code Playgroud)
Bri*_*sen 16
如果要取消a Task,则应在CancellationToken创建任务时传入.这将允许您Task从外部取消.如果需要,您可以将取消绑定到计时器.
要使用Cancellation标记创建任务,请参阅以下示例:
var tokenSource = new CancellationTokenSource();
var token = tokenSource.Token;
var t = Task.Factory.StartNew(() => {
// do some work
if (token.IsCancellationRequested) {
// Clean up as needed here ....
}
token.ThrowIfCancellationRequested();
}, token);
Run Code Online (Sandbox Code Playgroud)
要取消Task呼叫Cancel()上tokenSource.
小智 7
任务仍在运行,直到您明确告诉它停止或循环结束(这将永远不会发生).
您可以检查Wait的返回值以查看:
(来自http://msdn.microsoft.com/en-us/library/dd235606.aspx)返回值
类型:System.Boolean如果任务在指定的时间内完成执行,则为true;否则为false.否则,错误.
| 归档时间: |
|
| 查看次数: |
40846 次 |
| 最近记录: |