Task.Run()/Task.Factory.StartNew() 偶尔会遇到类似的问题,所以我认为必须有一些非常基本的东西,我不了解它的使用(对于那些喜欢花括号的人) ,我很抱歉不得不混淆VB):
我有一个带有以下代码的异步方法:
Try
Using context As New ECOSSContext
context.Meters.Attach(entity)
Await Task.Run(Sub() _
context.SaveChanges() _
)
'ANY CODE HERE NEVER GETS FIRED
End Using
Return True
Catch ex As Exception
Return False
End Try
它是从同步方法调用的,如下所示:
Dim result = ModelService.MeterResolution.SaveMeter(data).Result
据我了解,这应该等到 SaveMeter() 方法返回结果。我之前布置的异步方法应该在 Task.Run 行上等待,直到它返回,然后继续(因此等待)。相反,一旦命中 Await 行,调用堆栈似乎就退出了。SaveChanges() 成功,但我无法告知客户这一事实。
我在不同的应用程序中相对频繁地使用 TPL 并且没有遇到这些问题,但是没有我需要使用的 context.SaveChanges() 之类的方法。
任何建议表示赞赏。我希望我不只是误读了文档。