การซิงค์แบบคลาสสิกโดยใช้
คลาสสิกที่ใช้เรียกDispose()
วิธีการของวัตถุที่ใช้IDisposable
อินเตอร์เฟซ
using var disposable = new Disposable();
// Do Something...
มีค่าเท่ากับ
IDisposable disposable = new Disposable();
try
{
// Do Something...
}
finally
{
disposable.Dispose();
}
ใหม่ async กำลังรอการใช้งาน
ใหม่รอการใช้การโทรและรอDisposeAsync()
วิธีการของวัตถุที่ใช้IAsyncDisposable
อินเตอร์เฟซ
await using var disposable = new AsyncDisposable();
// Do Something...
มีค่าเท่ากับ
IAsyncDisposable disposable = new AsyncDisposable();
try
{
// Do Something...
}
finally
{
await disposable.DisposeAsync();
}
IAsyncDisposable อินเตอร์เฟซที่ถูกเพิ่มเข้ามาในและ.NET Core 3.0
.NET Standard 2.1
ใน. NET คลาสที่เป็นเจ้าของทรัพยากรที่ไม่มีการจัดการมักจะใช้อินเทอร์เฟซIDisposableเพื่อให้มีกลไกสำหรับการปล่อยทรัพยากรที่ไม่มีการจัดการพร้อมกัน อย่างไรก็ตามในบางกรณีพวกเขาจำเป็นต้องจัดเตรียมกลไกแบบอะซิงโครนัสสำหรับการปล่อยทรัพยากรที่ไม่ได้รับการจัดการเพิ่มเติมจาก (หรือแทน) แบบซิงโครนัส การจัดให้มีกลไกดังกล่าวช่วยให้ผู้บริโภคสามารถดำเนินการกำจัดทรัพยากรได้อย่างมากโดยไม่ต้องบล็อกเธรดหลักของแอปพลิเคชั่น GUI เป็นเวลานาน
กระบวนการIAsyncDisposable.DisposeAsyncของอินเทอร์เฟซนี้ส่งคืนValueTaskที่แสดงถึงการดำเนินการกำจัดแบบอะซิงโครนัส คลาสที่เป็นเจ้าของทรัพยากรที่ไม่มีการจัดการใช้วิธีการนี้และผู้บริโภคของคลาสเหล่านี้เรียกวิธีนี้บนวัตถุเมื่อไม่ต้องการอีกต่อไป
await using
กับ a เท่านั้นIAsyncDisposable
และคุณสามารถใช้using
กับ aIDisposable
เนื่องจากไม่มีสิ่งใดสืบทอดมาจากอีกอันหนึ่งได้ เวลาเดียวที่คุณสามารถใช้ได้คือถ้าคลาสรูปธรรมใช้ทั้งคู่และจากนั้นขึ้นอยู่กับว่าคุณกำลังเขียนโค้ดอะซิงโครนัสหรือไม่