bir işlev çağırın ve asla C # ile bekleyin


26

Mvc4 web uygulamamda, başka bir işlevi çağırması gereken bir işlemin olduğu bir denetleyicim var. Bu fonksiyonda ne olduğu, yani geri dönüş değeri eylemim için önemli değil. Bu işlevi nasıl arayabilir ve yürütülmesini asla beklemeyebilirim?

Asenkronce yapılabileceğini düşünüyorum ama benim açımdan kaynakları kullanmak değil, sadece işlevi çağırın ve ne olduğunu asla beklemeyin.

Lütfen bana bir tavsiyede bulunun.



Bunu yapmanın tek yolu başka bir iş parçacığına geçirmektir. Çalışmamaya istemediğiniz sürece, kaynakları olmayan bir fonksiyonu çağırmak gibi bir şey yoktur.
Robert Harvey

teşekkürler, en iyi ve en iyi yolun ne olduğunu kastediyorum, bence en iyi yol Task.Run ve WebApi’nin MVC’de kullanılmasıdır; profesyonel!
user2675751

Yanıtlar:


40
private void Demo()
{
    // Do something, given that the result doesn't matter.
}

public void Do()
{
    Task.Factory.StartNew(this.Demo);

    // The following line will be executed without waiting for the result.
    DoSomethingElse();
}

Sonucu önemsemeden veya atabileceği istisnalar dışında bir yönteme başlamanın riskli olduğuna dikkat edin.

Bir istisna atılırsa Task, aşağıdakilere kadar gizlenir:

  1. Sonucu gözlemleyin,
  2. Wait() görev için veya:
  3. GC, üzerindeki sonlandırıcıyı çağırır Task.

Yöntemi çağırdıktan kısa bir süre sonra kendiniz 1. ve 2. başa çıkabilirsiniz ya myTask.OnComplete(myErrorHandler, TaskContinuationOptions.OnlyOnFaulted)da orijinal görev bir istisna atarken çalıştırılacak olan bir devamı ekleyebilirsiniz . 3. sürecinizi çökertecek; bunu yapma.


3
"3. işleminizi çökertirecek; bunu yapmayın" seçeneğini genişletebilir misiniz? Bu otomatik olarak yapılmadı mı?
19
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.