เรียกใช้ฟังก์ชั่นและไม่ต้องรอใน C #


26

ฉันมีคอนโทรลเลอร์ในแอปพลิเคชันเว็บ mvc4 ซึ่งมีการดำเนินการที่ต้องเรียกใช้ฟังก์ชันอื่น จะเกิดอะไรขึ้นในฟังก์ชั่นนั้นเช่นค่าตอบแทนไม่สำคัญสำหรับการกระทำของฉัน ฉันจะเรียกฟังก์ชั่นนั้นและไม่ต้องรอให้มันทำงานได้อย่างไร?

ฉันคิดว่ามันสามารถทำได้โดย async แต่ประเด็นของฉันคือไม่ใช้ทรัพยากรเพียงแค่เรียกใช้ฟังก์ชั่นและไม่ต้องรอสิ่งที่เคยเกิดขึ้น

โปรดให้คำแนะนำแก่ฉัน



วิธีเดียวที่คุณสามารถทำได้คือส่งผ่านไปยังเธรดอื่น ไม่มีสิ่งใดที่เรียกว่าฟังก์ชั่นที่ไม่มีทรัพยากรเว้นแต่คุณเพียงแค่ต้องการให้มันเป็นแบบไม่ใช้งาน
Robert Harvey

ขอบคุณฉันหมายถึงสิ่งที่ดีที่สุดและวิธีที่ดีที่สุดฉันคิดว่าวิธีที่ดีที่สุดคือ Task.Run และการใช้ WebApi ใน MVC ตามลิงก์ @ user814064 ที่กล่าวถึงบางทีฉันสามารถใช้โซลูชัน JavaScript ได้ แต่ฉันคิดว่านั่นไม่ใช่ มืออาชีพ!
user2675751

คำตอบ:


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

โปรดทราบว่าการเริ่มต้นวิธีการโดยไม่สนใจเกี่ยวกับผลลัพธ์หรือข้อยกเว้นที่สามารถโยนได้นั้นมีความเสี่ยง

หากมีข้อยกเว้นเกิดขึ้นใน a Taskจะถูกซ่อนไว้จนกว่าคุณ:

  1. สังเกตผล
  2. Wait() สำหรับงานหรือ:
  3. ประชาคมโลกเรียก finalizer Taskบนที่

คุณสามารถจัดการกับตัวคุณเอง 1. และ 2. ไม่นานหลังจากที่คุณเรียกใช้เมธอดหรือคุณสามารถแนบความต่อเนื่องmyTask.OnComplete(myErrorHandler, TaskContinuationOptions.OnlyOnFaulted)ที่จะทำงานเมื่องานดั้งเดิมมีข้อยกเว้น 3. จะขัดข้องกระบวนการของคุณ อย่าทำอย่างนั้น


3
คุณช่วยขยาย "3. จะทำให้กระบวนการของคุณล้มเหลวอย่าทำอย่างนั้น" สิ่งนี้ไม่ได้ทำโดยอัตโนมัติหรือไม่
rdans
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.