gpt4 book ai didi

c# - Async 和 Await 进程中的实体对象

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

我正在尝试使用 Async 和 Await 进行上传过程。我创建了一个小代码以查看它是否有效。

class Program
{
static void Main(string[] args)
{
for (int i = 0; i < 5; i++)
{
TestAsync().Wait();
}
}

public static async Task TestAsync()
{
await Task.Run(() => {
Thread.Sleep(1000);
var context = new CommonEntities();
context.AddToDummies(new Dummy { TimeStamp = DateTime.Now, Caption = "Async" });
context.SaveChanges();
});
}
}

但由于某种原因,它永远不会到达 Console.WriteLine。如果我将 var context = new EntityObject(); 替换为 var stringBuilder = new StringBuilder(); 那么它就起作用了。

我的想法是,我将创建一个方法,其中包含许多保存和更新数据库以及调用 Web 服务并将结果存储到数据库等复杂过程。假设该方法称为 MethodA .

public static async void test()
{
await Task.Run(() => MethodA());
}

但在继续之前,我陷入了这个简单的测试。知道这是为什么吗?

最佳答案

除了事件处理程序之外,您不应该在任何地方使用 async void

async void 不允许调用者等待(异步或其他方式)操作完成,它只是继续进行。在您的情况下,它到达 Main 的末尾并且应用程序在您有机会到达 Console.WriteLine 之前结束。

您需要更改 TestAsync 以返回一个 Task 并在 Main 中等待它:

static void Main()
{
TestAsync().Wait();
}

public static async Task TestAsync()
{
await Task.Run(() =>
{
var objectContext = new CommonEntities();
Console.WriteLine("Processed");
});
}

关于c# - Async 和 Await 进程中的实体对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30474184/

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