我们已经将代码库升级为使用async / await,但是由于新的异步代码(HttpContext = null是常见问题),许多以前可以使用的方法现在崩溃了.我不确定如何解决此IComparer.Compare()方法.有任何想法吗?似乎我不能在Compare方法上使用异步任务:
public int Compare(myClass x, myClass y)
{
int someInteger;
// Standard, boring sorting code here.
// This is an MVC application calling into an Async method() here...
var xx = x.CallNewAsyncMethod();
var yy = y.CallNewAsyncMethod();
// Work with xx and yy now...
return someInteger;
}
如果我无法使.NET IComparer.Compare()方法异步,是否可以使用其他替代方式(例如LINQ)对我的类进行排序?需要注意的一件事是,我已经简化了上面的代码,但是里面确实有很多事情发生,而且我们的排序代码并不简单.我们可以使用大约10种不同的类别,每种类别实际上是一个三级类别(按a,然后b,然后c)进行排序.
谢谢你的帮助!
解决方法:
many previously working methods now crash as a result of the new asynchronous code (HttpContext = null being a common issue).
默认情况下,await将正确保留HttpContext,所以我发现这个问题很奇怪.请确保您正在.NET 4.5上运行,并且还以web.config中的ASP.NET 4.5为目标(默认情况下,升级后的项目将以ASP.NET 4.0为目标,这与await不兼容).
I’m not sure how to get around this IComparer.Compare() method.
这是我第一次听说有人进行异步比较.多么有趣的主意.
建议您在比较两个内存对象时不要执行I / O或远程服务调用.如果需要执行I / O,则在比较之前进行.您可以将I / O结果存储在对象中,从对象到比较值的字典映射中或以星历表形式存储.然后,您的Compare方法完全在内存中工作,并且可以同步.