我有下面的代码调用工作流程。我想知道是否可以使用async ctp将控制器更改为异步。异步ctp MVC4和工作流程
public ActionResult Index()
{
var input = new Dictionary<string, object>();
input["ViewData"] = this.ViewData;
var userState = "BeginInvoke example";
var invoker = new WorkflowInvoker(HelloMvcDefinition);
Task workflowTask = Task.Factory.FromAsync<IDictionary<string, object>>(
invoker.BeginInvoke(input, WorkflowCompletedCallback, userState),
invoker.EndInvoke);
workflowTask.Wait();
return View();
}
我都试过,但我似乎无法得到它的工作:
public async Task<ActionResult> Index()
{
var input = new Dictionary<string, object>();
input["ViewData"] = this.ViewData;
var userState = "BeginInvoke example";
var invoker = new WorkflowInvoker(HelloMvcDefinition);
Task workflowTask = Task.Factory.FromAsync<IDictionary<string, object>>(
invoker.BeginInvoke(input, WorkflowCompletedCallback, userState),
invoker.EndInvoke);
await workflowTask;
return View();
}
不幸的观点似乎并没有工作。关于我做错什么的想法?
编辑 服用意见后,我已经改变了方法,这
public class HelloController : AsyncController
{
private static readonly HelloWorkflow HelloMvcDefinition = new HelloWorkflow();
public Task<ViewResult> Index()
{
var input = new Dictionary<string, object>();
input["ViewData"] = ViewData;
const string userState = "BeginInvoke example";
var invoker = new WorkflowInvoker(HelloMvcDefinition);
return Task.Factory.FromAsync<IDictionary<string, object>>(
invoker.BeginInvoke(input, WorkflowCompletedCallback, userState),
invoker.EndInvoke).ContinueWith(t => View());
}
static void WorkflowCompletedCallback(IAsyncResult result)
{
}
}
的正常工作,所以这个问题一定要我如何使用异步关键字。
感谢
你能解释一下症状吗?另外,如果您只是将await更改为.Wait()(将其标记为异步),它是否会再次开始工作?谢谢 – 2012-04-02 15:30:06
这个问题似乎源于使用async关键字。如果我添加Wait()它仍然不起作用。当我调用这个控制器时,视图应该显示在工作流中显示的消息中,但目前浏览器只是在旋转。 – Beats 2012-04-03 11:34:26