ASP.NET MVC异步链接导致100%的cpu利用率

时间:2014-08-01 13:18:46

标签: c# asp.net .net asp.net-mvc async-await

我正在使用await / async开发ASP.NET MVC应用程序。我的控制器中有以下方法:

public async Task<ActionResult> PrintCachePartial()
{
    var cacheItems = await cacheProvider.GetPrintCacheItems();
    return View(cacheItems);
}

然后调用cacheProvider.GetPrintCacheItems()

public async Task<IEnumerable<PrintCacheItem>> GetPrintCacheItems()
{
    var res = await atrServiceFacade.GetCacheList(CacheType.PrintCache);
    var entities = DataSetToCacheItemEntities(res.dataSet).ToArray();
    return entities;
}

这会调用atrServiceFacade.GetCacheList()

public Task<AtrDataSetResult> GetCacheList(CacheType cacheType)
{
    var tcs = new TaskCompletionSource<AtrDataSetResult>();
    var client = serviceFactory.GetATRServiceClient();
    client.CacheListCompleted += (sender, args) => AsyncHelper.AsyncCompleted(sender, args, tcs);
    client.CacheListAsync(cacheType);
    return tcs.Task;
}

这只是SOAP服务的任务包装器。

看起来它工作正常,但问题是每次刷新页面时(调用控制器方法),IIS进程的CPU利用率提高了大约30%。所以很快达到100%。

我认为是因为await / async,但我不确定。

我正在使用面向.NET 4的ASP.NET MVC 4.对于await / async兼容性我正在使用Microsoft.Bcl.Async库。

1 个答案:

答案 0 :(得分:0)

就像我在上面的评论中提到的那样。我与await / async没有任何关系。

只有在Visual Studio 2013 Update 2运行且解决方案打开时才显示高CPU。当我关闭VS一切都很好。

安装VS Update 3后,RC一切正常,所以这只是VS的错误。

source