我正在使用.net 4.0。我有一個異步信號集線器,它返回一個任務。 根任務也有一個與之關聯的ContinueWith。異步信號集線器 - 返回根任務不推事件
- 當我返回1st/root任務時,我的Clients.Caller按鈕不會出現在瀏覽器中。
- 當我返回ContinueWith任務時,我的Clients.Caller推送出現在瀏覽器中。
所以這確實推送更新了瀏覽器....
public class MyHub : Hub
......
public Task DoSomething()
{
return myService
.DoSomeIO()
.ContinueWith(t => {
Clients.Caller.helloWorld("hello world");
//do other stuff
});
}
這不 ..
public class MyHub : Hub
......
public Task DoSomething()
{
var rootTask = myService.DoSomeIO();
rootTask.ContinueWith(t => {
Clients.Caller.helloWorld("hello world");
//do other stuff
});
return rootTask;
}
這是爲什麼?
我問的原因是因爲我可以單元測試第二種情況,但不能第一種。使用第二種場景,我可以開始任務,然後等待它完成,控制權將跳入繼續,然後我可以對後續服務調用做出斷言。
,因爲我得到一個
開始可能無法在後續任務
'Start()'只能在一個特殊情況下工作(當你有一個使用構造函數創建的Task時)。在所有其他情況下,'Start()'沒有任何意義,因爲Task已經啓動,或者它自己啓動。 – svick
另外,你能解釋更多關於你的單元測試問題嗎? – svick
@svick我使用這個擴展返回我一個任務在我的測試...公共靜態IReturnsResult ReturnsAsync ( 這IReturns >設置,TResult值) 其中TMock:類 { 返回設置。返回(新任務(()=>值)); }。然後我只是調用task.Start(); task.Wait(); ....然後讓我的斷言。正如我所提到的,如果我從集線器返回根任務,但如果我返回continuewith任務,則不會有效。謝謝 –
jonho