我们说我有这样的事情:
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
,但不同参数。
重用这些任务是否明智?该项目建立,但我不确定如何纠正'这是。
答案 0 :(得分:1)
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();
答案 1 :(得分:-1)
从变量命名的角度来看,我不建议为不同的对象重用相同的变量,因为命名变量是一个很好的做法,所以你会描述你的对象,这样的事情可能会让人很困惑:
var dog = new Mammal(Mammals.Dog);
//some code
dog = new Mammal(Mammals.Cat);
// dog actually is a cat
但是,如果您不关心可读性,那么您的方法没有任何问题。
答案 2 :(得分:-3)
在我看来,重用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
是一个实现接口的类。
所以,回答你的问题,是的,你可以重复使用它,因为它是一个类,因为它是一个类,它基本上是对创建的对象的引用。