我有下面的代碼調用工作流程。我想知道是否可以使用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