Asynchrone Fertigstellung und EntsorgungC#

Ein Treffpunkt für C#-Programmierer
Anonymous
 Asynchrone Fertigstellung und Entsorgung

Post 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?

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post