ワークフローを呼び出す以下のコードがあります。 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();
}
残念ながらビューが動作するようには思えません。私が間違っていることに関するアイデアは?
EDIT アドバイスを受けた後、私はこの問題は、私は非同期キーワードを使用していますどのようにする必要がありので、正常に動作します。この
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)
{
}
}
に方法を変更しました。
おかげ
症状をさらに説明できますか?また、待っているだけを.Wait()に変更すると(非同期とマークされたままになります)、再び動作しますか?ありがとう –
問題は、非同期キーワードを使用していると思われます。私がWait()を追加すると、それはまだ動作しません。このコントローラーを呼び出すと、ワークフローのメッセージが表示された状態でビューが表示されますが、現在のところブラウザーは回転し続けています。 – Beats