我们已经升级了我们的代码库以使用异步/等待,但是许多以前工作的方法现在由于新的异步代码而崩溃(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 结果存储在对象中,存储在从对象到比较值的字典映射中,或者存储为 ephemerons。然后您的 Compare
方法完全在内存中工作并且可以是同步的。
关于c# - 在 C# 中异步使用 IComparer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32000113/