0Pricing
C# Academy · บทเรียน

นโยบายหมดเวลาและค่าทดแทน

จำกัดเวลารอและจัดเตรียมค่าทดแทนอย่างเหมาะสม

นโยบายหมดเวลาและค่าทดแทน เป็นบทเรียน C# Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน C# Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส C# Academy มีบทเรียนทั้งหมด 4 บทเรียน

เหตุใดการหมดเวลาจึงสำคัญ

การเรียกที่ไม่เคยส่งคืนผลลัพธ์แย่กว่าการเรียกที่ล้มเหลว เพราะจะยึดครองเธรดและการเชื่อมต่อไว้ กลยุทธ์การหมดเวลาจะจำกัดระยะเวลาที่การดำเนินการจะทำงานได้ก่อนที่ Polly จะยกเลิกการทำงาน

เพิ่มการหมดเวลา

Polly v8 มี AddTimeout เมื่อเกินขีดจำกัด ระบบจะส่ง TimeoutRejectedException และยกเลิกโทเค็นที่อยู่เบื้องหลัง

using Polly.Timeout;

var pipeline = new ResiliencePipelineBuilder()
    .AddTimeout(TimeSpan.FromSeconds(3))
    .Build();

การยกเลิกแบบร่วมมือกัน

การหมดเวลาทำงานโดยยกเลิก CancellationToken ที่ส่งให้โคลแบ็ก โค้ดของคุณต้องเคารพโทเค็นดังกล่าว เพื่อให้การหมดเวลามีผลโดยเร็ว

await pipeline.ExecuteAsync(async token =>
{
    // token is cancelled when the timeout fires
    await httpClient.GetAsync(url, token);
});

ตอบสนองต่อการหมดเวลา

ใช้ TimeoutStrategyOptions ร่วมกับโคลแบ็ก OnTimeout เพื่อบันทึกข้อมูลการทำงานหรือส่งตัวชี้วัดเมื่อการดำเนินการถูกหยุดก่อนกำหนด

new TimeoutStrategyOptions
{
    Timeout = TimeSpan.FromSeconds(3),
    OnTimeout = args =>
    {
        Console.WriteLine($"Timed out after {args.Timeout}");
        return default;
    }
};

ทางเลือกสำรองคืออะไร

ทางเลือกสำรองจะมอบผลลัพธ์ทดแทนเมื่อการดำเนินการล้มเหลว ทำให้ผู้ใช้ได้รับประสบการณ์ที่ยังใช้งานได้แทนที่จะเห็นข้อผิดพลาด เช่น ข้อมูลที่เก็บไว้ในแคช ค่าเริ่มต้น หรือข้อความที่เป็นมิตร

เพิ่มกลยุทธ์ทางเลือกสำรอง

AddFallback ต้องใช้ pipeline แบบระบุชนิด คุณกำหนดว่าความล้มเหลวใดที่ต้องจัดการ และจะส่งคืนค่าใดแทน

using Polly.Fallback;

var pipeline = new ResiliencePipelineBuilder<string>()
    .AddFallback(new FallbackStrategyOptions<string>
    {
        ShouldHandle = new PredicateBuilder<string>()
            .Handle<HttpRequestException>(),
        FallbackAction = args =>
            Outcome.FromResultAsValueTask("cached default")
    })
    .Build();

ส่งคืนข้อมูลที่เก็บไว้ในแคชเป็นทางเลือกสำรอง

รูปแบบที่ใช้กันทั่วไปคือส่งค่าที่ถูกต้องล่าสุดจากแคชเมื่อการเรียกแบบเรียลไทม์ล้มเหลว เพื่อให้แอปพลิเคชันยังตอบสนองได้ดี

FallbackAction = args =>
{
    var cached = _cache.GetLastKnownGood();
    return Outcome.FromResultAsValueTask(cached);
}

ติดตามการใช้ทางเลือกสำรอง

โคลแบ็ก OnFallback จะทำงานเมื่อมีการใช้ทางเลือกสำรอง เหมาะสำหรับบันทึกข้อมูลการทำงานว่าระบบเลือกเส้นทางการทำงานแบบลดระดับแล้ว

new FallbackStrategyOptions<string>
{
    FallbackAction = args => Outcome.FromResultAsValueTask("default"),
    OnFallback = args =>
    {
        Console.WriteLine("Fallback executed");
        return default;
    }
};

การหมดเวลาร่วมกับทางเลือกสำรอง

การใช้ทั้งสองอย่างร่วมกันมีประสิทธิภาพมาก การหมดเวลาจะจำกัดระยะเวลารอ ส่วนทางเลือกสำรองจะจัดเตรียมค่าเมื่อเกิดการหมดเวลาหรือความล้มเหลวใด ๆ ที่กำหนดให้จัดการ ทำให้ผู้เรียกไม่ต้องรอค้างหรือแอปพลิเคชันหยุดทำงาน

เลือกเวลาหมดเวลาที่เหมาะสม

กำหนดเวลาหมดเวลาจากค่าความหน่วงที่เป็นจริงและเผื่อระยะเวลาไว้ ไม่ใช่กำหนดค่าเล็ก ๆ โดยไม่มีเหตุผล หากสั้นเกินไป การเรียกที่ทำงานปกติจะล้มเหลว หากยาวเกินไป ก็จะทำให้เป้าหมายของการหมดเวลาไม่มีความหมาย

ทางเลือกสำรองคือทางเลือกสุดท้าย

วางทางเลือกสำรองไว้เป็นกลยุทธ์ชั้นนอกสุด เพื่อให้จับความล้มเหลวจากการลองใหม่ ตัวตัดวงจร และการหมดเวลาได้ทั้งหมด และรับประกันว่าผู้เรียกจะได้รับผลลัพธ์ที่ใช้งานได้เสมอ

ตรวจสอบอย่างรวดเร็ว

ทดสอบกลยุทธ์การหมดเวลาและทางเลือกสำรอง

สรุป

การหมดเวลาจำกัดระยะเวลาของการดำเนินการด้วย AddTimeout โดยยกเลิกโทเค็นและส่ง TimeoutRejectedException ออกมา (อย่าลืมเคารพโทเค็น!) ทางเลือกสำรองจะจัดเตรียมผลลัพธ์ทดแทนผ่าน AddFallback และ FallbackAction โดยมักส่งข้อมูลจากแคช การใช้ทั้งสองอย่างร่วมกันช่วยให้แอปพลิเคชันยังตอบสนองได้ดี คือจำกัดเวลารอแล้วลดระดับการทำงานอย่างเหมาะสม วางทางเลือกสำรองไว้ชั้นนอกสุดเพื่อให้จับความล้มเหลวที่ต้องจัดการได้ทั้งหมด

คำถามที่พบบ่อย

บทเรียน “นโยบายหมดเวลาและค่าทดแทน” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “นโยบายหมดเวลาและค่าทดแทน” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส C# Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส C# Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “นโยบายหมดเวลาและค่าทดแทน”

จำกัดเวลารอและจัดเตรียมค่าทดแทนอย่างเหมาะสม คุณปฏิบัติ C# Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน C# Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน C# Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน

บทเรียน “นโยบายหมดเวลาและค่าทดแทน” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน C# Academy นี้ได้ไหม

ได้ บทเรียน C# Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. นโยบายการลองใหม่
  2. รูปแบบตัวตัดวงจร
  3. นโยบายหมดเวลาและค่าทดแทน
  4. ไปป์ไลน์ความทนทาน
← กลับไปที่ C# Academy