c# fire and forget 异步方法:在 .net 4 中实现 yield()
c# fire and forget async method: implement yield() in .net 4
我正在尝试实现一个 fire and forget async 方法,以进行日志记录以供审计。
我按照这个例子Async throw-away fire-and-forget with C#.NET。
public async Task MessageAsync(string message, DateTime date)
{
_logger.Info($"At {DateTime.UtcNow.ToString("yyyy-MM-dd HH:mm:ss.fff", CultureInfo.InvariantCulture)}: {message}");
await Task.Yield(); //NOT POSSIBLE IN .NET 4.0
}
但是我有使用.net framework 4.0的限制,无法使用
await Task.Yield();
我理解这是确保该方法异步执行的唯一方法,来自 Microsoft:
You can use await Task.Yield(); in an asynchronous method to force the
method to complete asynchronously.
我的问题是:
在 .net 4.0 中此实现的替代方案是什么?
根据@Evk 的消息,我试过这个:
Task MessageAsync(string message, DateTime date, CancellationToken token)
{
var messageToLog =$"At {date.ToString("yyyy-MM-dd HH:mm:ss.fff", CultureInfo.InvariantCulture)}: {message}";
Task.Factory.StartNew(() => _logger.Info(messageToLog), token);
}
我正在尝试实现一个 fire and forget async 方法,以进行日志记录以供审计。
我按照这个例子Async throw-away fire-and-forget with C#.NET。
public async Task MessageAsync(string message, DateTime date)
{
_logger.Info($"At {DateTime.UtcNow.ToString("yyyy-MM-dd HH:mm:ss.fff", CultureInfo.InvariantCulture)}: {message}");
await Task.Yield(); //NOT POSSIBLE IN .NET 4.0
}
但是我有使用.net framework 4.0的限制,无法使用
await Task.Yield();
我理解这是确保该方法异步执行的唯一方法,来自 Microsoft:
You can use await Task.Yield(); in an asynchronous method to force the method to complete asynchronously.
我的问题是: 在 .net 4.0 中此实现的替代方案是什么?
根据@Evk 的消息,我试过这个:
Task MessageAsync(string message, DateTime date, CancellationToken token)
{
var messageToLog =$"At {date.ToString("yyyy-MM-dd HH:mm:ss.fff", CultureInfo.InvariantCulture)}: {message}";
Task.Factory.StartNew(() => _logger.Info(messageToLog), token);
}