gpt4 book ai didi

c# - 将 Action 与 Task 结合使用 - 不确定它是如何工作的

转载 作者:太空宇宙 更新时间:2023-11-03 20:23:41 25 4
gpt4 key购买 nike

我需要为我的应用程序创建一个单独的线程来记录一些事情,有人建议我使用 Task。

我似乎没有这个权利,因为我不完全理解任务(我猜)。

这是我的:

public static void LogException(string message, Exception ex)
{
Action action= delegate() { logException(message, ex); };
new Task(action);
}

public static void logException(string message, Exception ex)
{
var stackTrace = new StackTrace();
var origin = stackTrace.GetFrame(1).GetMethod().Name;
var originclass = stackTrace.GetFrame(1).GetMethod().ReflectedType.Name;
var neworigin = string.Format("{0}.{1}", originclass, origin);

message += Environment.NewLine + Environment.NewLine + GetFullExceptionMessage(ex);

if (string.IsNullOrEmpty(message)) message = "No message given";

//var exceptions = GetAllErrMessages(ex);
//message = exceptions.Aggregate(message, (current, exception) => current + Environment.NewLine + exception);

EventLogging.LogEvent(neworigin, message, EventLogEntryType.Error, 9999);

EmailMessage(neworigin, message, EventLogEntryType.Error);
}

我做错了什么?我没有收到任何错误,但话又说回来,我没有收到任何日志。

谢谢!

最佳答案

new Task(action); 创建一个新任务,但它不会执行任何会导致它实际执行的操作。

在这种情况下,您可以只使用:

Task.Factory.StartNew( () => { /* code goes here */ });

值得一提的是,如果您的代码特别短,那么创建/安排任务的开销可能比实际直接运行它要慢(这当然取决于代码是什么)。还要确保在多线程环境中记录事件时,错误记录能够正常工作。如果没有,您可以决定不打扰,或者添加显式锁定。

关于c# - 将 Action 与 Task 结合使用 - 不确定它是如何工作的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11973650/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com