在这段生成的通知代码用于长期进程中的机密报告前,对它进行审查。
允许零个监听器;在 PublishAsync 返回前等待每次面板保存;保留失败;不记录报告内容;并在释放面板时解除订阅。
csharp
using System;
using System.Threading.Tasks;
public sealed class ReportSource
{
public event EventHandler<string>? Ready;
public async Task PublishAsync(string report)
{
Ready!.Invoke(this, report);
await Task.CompletedTask;
}
}
public sealed class Dashboard : IDisposable
{
private readonly ReportSource _source;
public Dashboard(ReportSource source) {
_source = source;
_source.Ready += async (_, report) =>
{
Console.WriteLine($"saving {report}");
await SaveAsync(report);
};
}
public void Dispose() => _source.Ready -= async (_, report) => await SaveAsync(report);
private static Task SaveAsync(string report) => Task.Delay(10);
}
生成代码仅作示例,不代表任何特定模型