Đồng bộ hóa cổ điển bằng cách sử dụng
Cổ điển sử dụng gọi Dispose()
phương thức của một đối tượng thực hiện IDisposable
giao diện.
using var disposable = new Disposable();
// Do Something...
Tương đương với
IDisposable disposable = new Disposable();
try
{
// Do Something...
}
finally
{
disposable.Dispose();
}
Async mới đang chờ sử dụng
Việc chờ đợi mới bằng cách sử dụng các cuộc gọi và chờ đợi DisposeAsync()
phương thức của một đối tượng thực hiện IAsyncDisposable
giao diện.
await using var disposable = new AsyncDisposable();
// Do Something...
Tương đương với
IAsyncDisposable disposable = new AsyncDisposable();
try
{
// Do Something...
}
finally
{
await disposable.DisposeAsync();
}
Các giao diện IAsyncDisposable được thêm vào .NET Core 3.0
và .NET Standard 2.1
.
Trong .NET, các lớp sở hữu tài nguyên không được quản lý thường triển khai giao diện IDis Dùng để cung cấp cơ chế giải phóng đồng bộ tài nguyên không được quản lý. Tuy nhiên, trong một số trường hợp, họ cần cung cấp một cơ chế không đồng bộ để giải phóng các tài nguyên không được quản lý ngoài (hoặc thay vì) cơ chế đồng bộ . Việc cung cấp một cơ chế như vậy cho phép người tiêu dùng thực hiện các hoạt động xử lý sử dụng nhiều tài nguyên mà không chặn luồng chính của ứng dụng GUI trong một thời gian dài.
Các IAsyncDisposable.DisposeAsync phương pháp của giao diện này trả về một ValueTask đại diện cho hoạt động dispose không đồng bộ. Các lớp sở hữu tài nguyên không được quản lý thực hiện phương thức này và người tiêu dùng của các lớp này gọi phương thức này trên một đối tượng khi không còn cần thiết.
await using
với mộtIAsyncDisposable
và bạn chỉ có thể sử dụngusing
với mộtIDisposable
vì không ai được thừa hưởng từ người khác. Thời gian duy nhất bạn có thể sử dụng là nếu lớp cụ thể thực hiện cả hai và sau đó tùy thuộc vào việc bạn có viết mã không đồng bộ hay không.