Page 1 of 1

Asynchrone Fertigstellung und Entsorgung

Posted: 15 Feb 2025, 17:07
by Anonymous
Ich habe eine Klasse, die verwendet wird, um asynchrones zu arbeiten.
Wenn es um die Entsorgung dieser Klasse geht, muss ich sicherstellen Erstens. < /p>
Es scheint, als ob es einige Muster dafür gibt.

Code: Select all

IAsyncDisposable

[*]

Code: Select all

Complete()
mit separatem Abschluss Aufgabe

Code: Select all

Complete()
mit separater Abschluss Aufgabe und dann auch dispose () ? Folgendes? < /p>

Code: Select all

public class AsyncWorkHelper
{
private readonly List _tasks = new();
private CancellationTokenSource? _cancellationTokenSource;
private SemaphoreSlim _semaphore = new SemaphoreSlim(1);
private bool _isComplete;

public async Task PushWorkAsync()
{
if (_isComplete)
return;

// ...
}

public async Task CompleteAsync(bool cancel)
{
_isComplete = true;

if (cancel)
_cancellationTokenSource?.Cancel();

// wait for all tasks to finish
await Task.WhenAll(_tasks.ToArray());

// now safe to clean up

_cancellationTokenSource?.Dispose();
_semaphore.Dispose();
}
}

Als sekundäre Frage frage ich mich auch, ob ich iDisis mit einer Blockierung auf Situationen implementieren sollte, in denen sich der Anrufcode in einem synchronen Kontext befindet?