panggil fungsi dan jangan pernah menunggu di C #


26

Saya memiliki pengontrol di aplikasi web mvc4 saya di mana ada tindakan yang perlu memanggil fungsi lain. Apa yang terjadi dalam fungsi itu yaitu nilai pengembalian tidak penting untuk tindakan saya. Bagaimana saya bisa memanggil fungsi itu dan tidak pernah menunggu untuk dieksekusi?

Saya pikir itu bisa dilakukan oleh async tetapi poin saya bukan menggunakan sumber daya, panggil saja fungsinya dan jangan pernah menunggu apa yang terjadi.

Tolong beri saya beberapa saran.



Satu-satunya cara Anda dapat melakukannya adalah dengan mengirimkannya ke utas lainnya. Tidak ada yang namanya memanggil fungsi tanpa sumber daya, kecuali jika Anda hanya ingin menjadi no-op.
Robert Harvey

terima kasih, saya maksudkan apa yang terbaik dan cara yang dioptimalkan, saya pikir cara terbaik adalah Task.Run dan menggunakan WebApi di MVC, berdasarkan tautan @ user814064 disebutkan, mungkin saya bisa menggunakan solusi javascript, tapi saya pikir itu bukan profesional!
user2675751

Jawaban:


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();
}

Perhatikan bahwa memulai metode tanpa peduli tentang hasil atau tentang pengecualian yang dapat dilemparkannya berisiko.

Jika pengecualian dilemparkan ke dalam Task, itu akan disembunyikan sampai Anda:

  1. Amati Hasilnya,
  2. Wait() untuk tugas, atau:
  3. GC menyebut finalizer pada Task.

Anda dapat menangani diri sendiri 1. dan 2. tidak lama setelah Anda memanggil metode, atau Anda dapat melampirkan lanjutan myTask.OnComplete(myErrorHandler, TaskContinuationOptions.OnlyOnFaulted)untuk dijalankan ketika tugas asli melempar pengecualian. 3. akan merusak proses Anda; jangan lakukan itu.


3
Bisakah Anda memperluas "3. akan merusak proses Anda; jangan lakukan itu". Bukankah ini dilakukan secara otomatis?
rdans
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.