gpt4 book ai didi

c# - 使用 Task.Run 的 Fire & Forget 方法不起作用

转载 作者:行者123 更新时间:2023-11-30 14:50:17 24 4
gpt4 key购买 nike

我阅读了很多尝试使用 Task.Run 的代码,但都没有成功。

我想要达到的目标:

  • 在 ASP.NET WebForm 事件(点击事件处理程序)中调用 Fire & Forget 方法(不阻止当前的执行流程)。

我试过但不明白为什么它不起作用:


第一版:

protected void btn_Click(object sender, EventArgs e)
{
// Some actions
// Should insert a record in database --> OK

//Tried this call with and without ConfigureAwait(false)
Task.Run(() => MyClass.doWork()).ConfigureAwait(false);

// Should insert a record in database --> OK
// Some actions not blocked by the previous call
}

public static class MyClass
{
public static void doWork()
{
// Should insert a record in database --> NOT INSERTED
}
}


第二个版本:

protected void btn_Click(object sender, EventArgs e)
{
// Some actions
// Should insert a record in database --> OK

Bridge.call_doWork();

// Should insert a record in database --> OK
// Some actions not blocked by the previous call
}

public static class Bridge
{
public static async Task call_doWork()
{
//Tried this call with and without ConfigureAwait(false)
await Task.Run(() => MyClass.doWork()).ConfigureAwait(false);
}
}

public static class MyClass
{
public static void doWork()
{
// Should insert a record in database --> NOT INSERTED
}
}

所以我调用了 Fire & Forget 方法,它应该在数据库中插入一条记录,但是没有插入任何记录。

完成调用 Fire & Forget 方法前后的插入。

我不知道如何解决我的问题。

最佳答案

HttpContext 在主线程以外的线程中不可用,因此您不能依赖它。

但是您可以在启动任务时将数据从 HttpContext 传递到您的方法。例如:

Task.Run(() => MyClass.doWork(HttpContext.Current.Session["somedata"])).ConfigureAwait(false);

关于c# - 使用 Task.Run 的 Fire & Forget 方法不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37007238/

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