c# - 在 C# 中异步使用 IComparer

标签 c# sorting asynchronous compare icomparer

我们已经升级了我们的代码库以使用异步/等待,但是许多以前工作的方法现在由于新的异步代码而崩溃(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/

相关文章:

javascript - 使用 .net 发布大文件后出现 404

c# - 查找 DataGridView 单元格

python - 如何根据另一个列表对列表进行排序? Python

javascript - 为什么我会看到重复的 JavaScript 异步响应?

javascript - Angular Controller 完成加载异步函数后加载 html View

c# - C#中的双重比较精度损失,加减 double 时发生精度损失

c# - 在 WP7 上使用 Google oAuth

java 生成嵌套报告最有效的方法?

c# - 如何在方法中将属性和排序顺序作为参数传递给排序列表

c# - 多委托(delegate)异步操作仅适用于 Begin Invoke