قابلیت Asynchronous disposable در C# 8

لیست ویژگی های جدید C# 8 :

امکان Dispose کردن جریان های Async با اینترفیس IAsyncDisposable

واسط IAsyncDisposable یک روش واحد دارد به نام DisposeAsync و چیزی که شاید تعجب کنید قوانین نامگذاری است که در واقع این روش ناهمزمان باید با پیشوند Async باشد .

به عنوان یک بهبود در عملکرد DisposeAsync یک ValueTask را به جای یک شی معمولی Task (Task object)  بر میگرداند .

public interface IAsyncDisposable
{
    ValueTask DisposeAsync();
}

و از آنجا که ممکن است به بی ثباتی منجر شود ، نمی توانید از Cancellation token در DisposeAsync استفاده کنید .

IAsyncDisposable از IDisposable ارث بری نمی کند و به توسعه دهندگان این امکان را می دهد یکی از این دو یا هر دو آن ها را انتخاب کنند به این معنی است که یک کلاس قادر است که هر دو رابط را ارائه دهد .

مایکروسافت پیشنهاد می کند که در صورت استفاده از هر دو کلاس باید Dispose و DisposeAsync را به ترتیب استفاده کنید این اجبار نیست و فقط توصیه است و اجراهای خاص ممکن است متفاوت باشد .

class MyComponent : IDisposable, IAsyncDisposable
{
  INetworkResource myResource;

  public void Dispose()
  {
    myResource.Close();
  }

  public async ValueTask DisposeAsync()
  {
    await myResource.CloseAsync();
  }
}