当我调用一个返回void的异步方法时,它是否与用task.run方法调用它时相同?我这样问是因为在FileSystemWatcher的文档中,它们提到了以下内容。
保持您的事件处理代码尽可能短。
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");
}
}
后期更新:除了接受的答案之外,的处理方式也有所不同:即使没有异步,也会还原CallContext.LogicalGetData。为什么?
可能重复: 为什么“[]==False”在“if not[]”成功时计算为False? 我是新的python作为每个三元运算符的python 我希望下面的代码输出为[],因为[]不等于零 如果我错了,请改正 谢谢你,赫玛
注意:还有一个类似的问题,如何在task.run中调用异步方法?但是对于C#来说,选择的答案有反对票,并且没有地址configureaWait。
这是我的PS-EO快照,有些进程占用2.1GB内存。它的堆的最大大小为768MB,元数据库的最大大小为256MB。我想进程占用的空间不会超过1024MB(768+256)。但事实并非如此。除了堆和元数据库,“RSS”中还包括什么?我如何监视像堆堆栈分析器一样的“RSS”内部?
问题内容: 我在HashSet比较中进行了此测试,但 并未被调用 当farAway = false时我想考虑等于(检查两个点距离的函数) 完整的可编译代码,您可以对其进行测试,并说明为什么在此示例中未调用equals。 编辑 -是否有一种方法可以强制HashSet添加到调用等于? 问题答案: 如果哈希码不同,则无需调用,因为可以保证可以返回。 在此之前,从一般的合同上和: 如果根据该方法两个对象相
使用场景文本识别API连接SAP Leonardo沙箱服务器时出现HTTP 400错误 我在响应对象中得到以下详细信息 {url:https://sandbox.api.sap.com/ml/scenetextrecognition/scene-text-recognition/scene-text-recognition}{Status code:400,Headers{\n Connectio