任务是否可以重复使用
本文关键字:是否 任务 | 更新日期: 2023-09-27 18:26:19
假设我有这样的东西:
Task task0_1 = new Task(() => CopyFiles(now, Offset, true));
Task task0_2 = new Task(() => CopyFiles(now, Offset, true));
task0_1.Start();
task0_2.Start();
Task.WaitAll(task0_1, task0_2);
task0_1 = new Task(() => CopyFiles(0, 0, false));
task0_2 = new Task(() => CopyFiles(0, 0, false));
正如您所看到的,一旦两个任务都完成了(在Task.WaitAll
之后),我会再次以相同的方式调用CopyFiles
,重用task0_1
和task0_2
,但使用不同的参数。
重用这些任务明智吗?项目正在构建,但我不确定这有多"正确"。
task0_1
是一个变量,与任何其他变量类型一样,您可以重用它,同时这将使代码可读和可维护,因为您使用的是Task.WaitAll
,但要小心,因为使用Task.WaitAll
时会丢失任务的异步方面这里是的一个例子
Task task1 = Task.Factory.StartNew(() =>
{
for (int i = 0; i < 10000; i++)
{
Console.WriteLine( "task1" +i);
}
});
Task task2 = Task.Factory.StartNew(() =>
{
for (int i = 0; i < 10000; i++)
{
Console.WriteLine("task2" + i);
}
});
Task.WaitAll(task1, task2);
Console.WriteLine("hi I'm Here "); // hi im here will not printed until the others 2 tasks has finished so beaware of this on UI
Console.ReadLine();
从变量命名的角度来看,我不建议对不同的对象重复使用同一个变量,因为为变量命名是一种很好的做法,这样你就可以描述你的对象,而类似的事情可能会非常令人困惑:
var dog = new Mammal(Mammals.Dog);
//some code
dog = new Mammal(Mammals.Cat);
// dog actually is a cat
然而,如果您不关心可读性,那么您的方法就没有错。
在我看来,重用Task
没有错,因为它基本上是一个类。
在MSDN中:
http://msdn.microsoft.com/en-us/library/system.threading.tasks.task(v=vs.110).aspx
[HostProtectionAttribute(SecurityAction.LinkDemand, Synchronization = true,
ExternalThreading = true)]
public class Task : IAsyncResult, IDisposable
从上面的代码来看,Task
是一个实现接口的类。
所以,为了回答你的问题,是的,你可以重用它,因为它是一个类,而且因为它是类,它基本上是对所创建对象的引用。