我正在使用MVC 4,并且我有以下代码:
public void DoWork(string connectionId)
{
connectionId = this.connectionId;
var a = MakeADelayAsync();
}
public async Task MakeADelayAsync()
{
await Task.Delay(5000);
var generalHubContext = GlobalHost.ConnectionManager.GetHubContext<GeneralHub>();
generalHubContext.Clients.Client(connectionId).showNotification("Completed");
}
"DoWork"方法是我的MVC操作。我的意图是当按下操作按钮时,“DoWork”调用一个异步方法并立即返回给客户端。当异步方法完成工作后,它将使用SignalR通知客户端。
问题在于“MakeADelayAsync”方法中,在等待之后的那两行代码永远不会被调用。似乎在await之后流程永远不会继续。
第一个问题是:“MakeADelayAsync”方法中的问题在哪里?
第二个问题是:为什么我必须编写无用的代码
var a = MakeADelayAsync();
以避免编译器警告,尽管我完全知道自己在做什么?我从来没有使用过“a”。
Task.Factory.StartNew(MakeADelayAsync, TaskScheduler.Default)
(从记忆中获取,可能签名有误)。 - Alxandr