Quasi tutta la documentazione che ho visto utilizzando C# 4.0 Task.Factory.StartNew afferma che per attendere il completamento dell'attività, è necessario attendere. Ma i miei test iniziali dimostrano che non è necessario. Qualcun altro può darmi conferma su questo? Sono curioso di sapere perché così tanti riferimenti online e stampati dicono che dovresti chiamare Wait.È necessario attendere() dopo aver utilizzato Task.Factory.StartNew()?
Ecco una semplice app per console che mostra che non ho bisogno dell'istruzione Wait, quindi ho commentato. Se commento o meno il tsk.Wait(), l'output è lo stesso.
uscita prevista in tutti i casi è la seguente:
Main thread starting. After running MyTask. The result is True After running SumIt. The result is 1 Main thread ending.
Il codice:
class Program
{
// A trivial method that returns a result and takes no arguments.
static bool MyTask()
{
Thread.Sleep(2000);
return true;
}
// This method returns the summation of a positive integer
// which is passed to it.
static int SumIt(object v)
{
int x = (int)v;
int sum = 0;
for (; x > 0; x--)
sum += x;
return sum;
}
static void Main(string[] args)
{
Console.WriteLine("Main thread starting.");
// Construct the first task.
Task<bool> tsk = Task<bool>.Factory.StartNew(() => MyTask());
// I found this Wait statement to be completely unnecessary.
//tsk.Wait();
Console.WriteLine("After running MyTask. The result is " +
tsk.Result);
// Construct the second task.
Task<int> tsk2 = Task<int>.Factory.StartNew(() => SumIt(1));
Console.WriteLine("After running SumIt. The result is " +
tsk2.Result);
tsk.Dispose();
tsk2.Dispose();
Console.WriteLine("Main thread ending.");
Console.ReadLine();
}
}
Grazie, Timwi. Ho avuto una scoreggia cerebrale e non ho notato che stavo usando Task anziché Task. Ora ha senso! –
@tambui: che ne dici di contrassegnarlo come una risposta? – stackoverflowuser
@stackoverflowuser: Scusa, non sapevo come. Fatto ora. –