Come posso verificare se un thread è stato restituito al pool di thread, utilizzando il debugger di VS C# 2015?Verifica se un thread è tornato al pool di thread
Ciò che è problematico nel mio caso è il fatto che non può essere rilevato eseguendo il debug linea per linea.
async Task foo()
{
int y = 0;
await Task.Delay(5);
// (1) thread 2000 returns to thread pool here...
while (y<5) y++;
}
async Task testAsync()
{
Task task = foo();
// (2) ... and here thread 2000 is back from the thread pool, to run the code below. I want
// to confirm that it was in the thread pool in the meantime, using debugger.
int i = 0;
while (i < 100)
{
Console.WriteLine("Async 1 before: " + i++);
}
await task;
}
Nella prima linea di testAsync
esecuzione sul filo 2000 foo
è chiamato. Una volta che incontra await Task.Delay(5)
, il thread 2000 ritorna al pool di thread (presumibilmente, sto tentando di confermarlo) e il metodo attende il completamento di Task.Delay(5)
. Nel frattempo, il controllo ritorna al chiamante e il primo ciclo di testAsync
viene eseguito anche sul thread 2000.
Quindi, tra due righe consecutive di codice, il thread è tornato al pool di thread e è tornato da lì. Come posso confermarlo con il debugger? Forse con la finestra del debugger di Threads?
Per chiarire un po 'più di quello che sto chiedendo: foo
è in esecuzione sul filo 2000. Ci sono due possibili scenari:
Quando colpisce
await Task.Delay(5)
, filo 2000 restituisce al pool di thread per un tempo molto tempo breve, e il controllo ritorna al chiamante, alla riga (2), che verrà eseguito sul thread 2000 prelevato dal pool di thread. Se ciò è vero, non è possibile rilevarlo facilmente, poiché Thread 2000 si trovava nel pool di thread durante il periodo tra due righe consecutive di codice.Quando colpisce
await Task.Delay(5)
, filo 2000 non tornare a infilare piscina, ma esegue immediatamente il codice intestAsync
a partire dalla linea (2)
mi piacerebbe per verificare quale sta realmente accadendo .
Provare 'attendere Task.Yield();' invece di 'attendere Task.Delay (5);'. –
@IvanStoev nessuna differenza. Non cambia i thread su cui gira, o non si comporta in modo diverso nella finestra di debug dei thread. – user4205580
Perché hai bisogno di sapere? – Enigmativity