调用 void async 等于 Task.Run?

Calling void async equals Task.Run?

当我调用一个 returns 无效的异步方法时,它与我用 Task.Run 方法调用它时一样吗?我问是因为在 FileSystemWatcher 的文档中他们提到了以下内容。

Keep your event handling code as short as possible.

https://docs.microsoft.com/en-us/dotnet/api/system.io.filesystemwatcher?view=net-5.0#events-and-buffer-sizes

所以我想很快离开事件方法的范围。或者它们的意思不同?

为了更好地理解我的代码片段。

private void OnCreated(object sender, FileSystemEventArgs e)
{
    RunSaveWithLogger(AddLocation, e.FullPath);
}

private async void RunSaveWithLogger(Func<string, Task> func, string fullPath)
{

编辑:

在阅读了您的回答和评论后,我将代码更改为这样。

private void OnCreated(object sender, FileSystemEventArgs e)
{
    Task.Run(() =>
    {
        RunSaveWithLogger(AddLocation, e.FullPath);
    });
}

private async void RunSaveWithLogger(Func<string, Task> func, string fullPath)
{
    try
    {
        await func.Invoke(fullPath);
    }
    catch (Exception exception)
    {
        _logger.LogError(exception, "");
    }
}

感谢您的宝贵时间和帮助,我真的很感激。

简单回答不!它们不一样。例如,在下面的示例中,“Task.Run”创建一个新线程,因此在新线程中运行其中的所有代码,而“async void”则不会。 (我怀疑这是否是您正在寻找的答案)。

using System;
using System.Threading.Tasks;
class Solution
{
    static void Main(string[] args)
    {
        async void Method1()
        {
            while (true)
            {

            }
        }
        Task.Run(() => {
            while (true)
            {

            }
        });
        Console.WriteLine("This  will print");
        Method1();
        Console.WriteLine("This won't");
    }
}