我试图理解异步方法概念,所以我做了一个返回视图的简单方法:
Public Async Function getPerfil() As Threading.Tasks.Task(Of ActionResult)
Dim objOrganizacion As comOrganizacion.comOrganizacion = New comOrganizacion.comOrganizacion
Dim ds As DataSet = Await Task.Run(objOrganizacion.GetUserPostulacion())
Return View()
End Function
如果我从函数Dim ds As DataSet = Await Task.Run(objOrganizacion.GetUserPostulacion())
中删除此行,那么该方法可以正常工作,我可以看到该视图。如果我不删除该行,我会得到:500 Internal Server Error
答案 0 :(得分:0)
以下是MSDN的异步性编程指南: https://msdn.microsoft.com/en-us/library/hh191443.aspx
这是很多阅读,我可以通过经验来说很难掌握,因为我仍然试图自己完全掌握它。但是,如果您使用MVC的脚手架,包括使用Await的控制器中的函数,可能会有所帮助......
在调用Await [function]时,该函数返回一个Task。例如:Controller中的Async HttpPost函数包含“Await db.SaveChangesAsync()"”行。如果你去了SaveChangesAsync()的定义,这就是它所说的:
Public Overridable Function SaveChangesAsync() As System.Threading.Tasks.Task(Of Integer)
Member of System.Data.Entity.DbContext
Summary: Asynchronously saves all changes made in this context to the underlying database.
Return Values: A task that represents the asynchronous save operation. The task result contains the number of objects written to the underlying database.
它使用的保存操作是SaveChanges,这是SaveChanges的定义:
Public Overridable Function SaveChanges() As Integer
Member of System.Data.Entity.DbContext
Summary: Saves all changes made in this context to the underlying database.
Return Values: The number of objects written to the underlying database.
所以基本上这意味着SaveChangesAsync对控制器函数做出PROMISE,以便在它拥有它之后返回它需要的东西。这就像使用中间人一样。假设您需要一个数字......而不是告诉NumberGetter“这就是我需要的”然后自己等待它,你告诉中间人“这就是我需要的”,然后他告诉NumberGetter你需要什么,并且自己等待它,以便在此期间你可以获得其他东西。
现在,在您的上下文中,您似乎想要进行此调用:
Dim ds As DataSet = Await objOrganizacion.GetUserPostulacionAsync()
其中objOrganizacion.GetUserPostulacionAsync()是一个返回Task(Of DataSet)的异步函数。它调用实际函数(GetUserPostulacion),它将返回您需要的DataSet。
无论如何,我希望有所帮助!