قابلیت Asynchronous disposable در C# 8
لیست ویژگی های جدید C# 8 :
- قابلیت Readonly members در C# 8
- قابلیت Default interface methods در C# 8
- ویژگی های جدید Pattern matching
- قابلیت Using declarations در C# 8
- قابلیت Static local functions در C# 8
- قابلیت Disposable ref structs در C# 8
- قابلیت Nullable reference types در C# 8
- قابلیت Asynchronous streams در C# 8
- قابلیت Asynchronous disposable در C# 8
- قابلیت Indices and ranges در C# 8
- قابلیت Null-coalescing assignment در 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();
}
}