2017-03-29 34 views
9

Bir görev ne zaman başlıyor?C# Task gerçekte ne zaman başlıyor?

public void DoSomething() { 
    Task myTask = DoSomethingAsync(); 

    Task.WaitAll(new[] { myTask }, 2000); 
} 

public async Task DoSomethingAsync() { 
    await SomethingElse(); 
} 

Task myTask = DoSomethingAsync(); bunu başlatırken hemen başlıyor mu yoksa sen Task.WaitAll(new[] { myTask }, 2000); bunun için beklemek derken başlıyor?

+1

Bu büyük bir sorudur. Yeni başlayanlar için buraya bir göz atın: http://blog.stephencleary.com/2013/11/there-is-no-thread.html –

+1

Zaten herhangi bir araştırma yaptınız mı? – PJvG

+1

@PJvG Evet, tabiki. Herhangi bir tatmin edici cevap bulamadı. – GTHvidsten

cevap

10

async yönteminin çağrılması, daha önce başlatılmış bir görev olan sıcak görevini döndürür. Yani çalıştırmak için zorlamak için gerekli gerçek bir kod yoktur.

MSDN (thanks to Stephen Cleary) Görev tabanlı Asenkron Model (TAP) desenine göre requires returned tasks to be hot. Bu, new Task ile oluşturulanlar dışındaki tüm görevlerin sıcak olacağı anlamına gelir. başvurulan makale itibaren

: Kamu Task yapıcılar tarafından oluşturulur

Görevler soğuk görevler anılır ... Diğer tüm görevler sıcak halde onların yaşam döngüsünü başlar.

+0

Farkı bilmek için teşekkürler – Charlesliam

+1

"Zaman uyumsuz bir Görev döndüren bir yöntem çağırdığınızda, başlatılmaz." bana biraz kafa karıştırıcı geliyor. Async olmadan görevi döndüren yöntemlerin çoğu, hâlihazırda başlatılmış olan döndürme görevini döndürür, çünkü bunu yöntemin kendisinde başlatırlar. – Evk

+0

@Evk 'otomatik'> daha iyi? –

İlgili konular