- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
两难,两难……
我一直在为使用异步调用 HttpClient
库(GetAsync=>ConfigureAwait(false)
等)的问题制定解决方案。在控制台应用程序中,我的 dll 响应速度非常快,混合使用异步等待调用和 Parallel.ForEach(=>)
真的让我眼前一亮。
现在进入正题。从这个测试工具转移到目标应用程序后,事情就变得有问题了。我正在使用 asp.net mvc 4 并遇到了一些问题。主要问题实际上是在 Controller 操作上调用我的进程实际上会阻塞主线程,直到异步操作完成。我试过使用 async
Controller 模式,我试过使用 Task.Factory
,我试过使用 new Threads
。随心所欲,我已经尝试了所有口味 - 然后是一些!
现在,我明白 http 的本质并不是为了促进像这样的长过程而设计的,这里有很多关于 SO 的文章都说不要这样做。但是,我需要使用这种方法有一些缓解的原因。我需要在 mvc 中运行它的主要原因是我实际上通过在我的 dll 代码中引发事件来实时更新实时数据缓存(在 mvc 应用程序上)。这意味着可以在整个异步操作完成之前实时推出 50-60 个数据馈送的片段。因此,客户端应用程序可以在发起异步操作后的几秒钟内接收到部分更新。如果我将流程委托(delegate)给在后台运行整个流程的控制台应用程序,我将无法再利用这些片段部分更新,而这就是整个选择此架构背后的存在理由。
任何人都可以阐明一个解决方案,该解决方案可以减轻线程的阻塞,同时允许每个异步片段被我的对象模型使用并提供给客户端应用程序(我是使用 signalr
进行这些客户端更新)。一种必杀技将是这样一种场景,其中可以在多个进程之间共享进程外缓存对象 - 然后可以触发缓存更新并由我的 mvc 进程使用(又名 - http://devproconnections.com/aspnet-mvc/out-process-caching-aspnet ).回到现实……
我也考虑过使用辅助网络服务来实现这一点,但在再次过度工程
我的解决方案之前欢迎其他选择(已经有很多移动部件和大量异步Actions
继续)。
很抱歉没有添加任何代码,我希望获得实用的哲学/见解,而不是代码帮助,当然欢迎提供说明我的问题解决方案的编码示例。
随着时间的推移,我会更新问题,因为我的思考过程还在不断成熟。
[编辑] - 为了清楚起见,下面的片段是我兄弟的格林代码冲突(从更大的工作中提取):
Parallel.ForEach(scrapeDataBases, new ParallelOptions()
{
MaxDegreeOfParallelism = Environment.ProcessorCount * 15
},
async dataBase =>
{
await dataBase.ScrapeUrlAsync().ConfigureAwait(false);
await UpdateData(dataType, (DataCheckerScrape)dataBase);
});
最佳答案
async
和 Parallel.ForEach
不会自然混合,所以我不确定您的控制台解决方案是什么样的。此外,Parallel
几乎不应该在 ASP.NET 上使用。
听起来您想要的只是使用 Task.WhenAll
。
附带说明一下,我认为您关于 ASP.NET 后台处理的推理是不正确的。完全有可能有一个单独的进程通过 SignalR 更新客户端。
关于c# - 那种异步的感觉——httpclient 和 mvc 线程阻塞,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23175438/
我看到很多人发布关于 NullInjectorError: No provider for HttpClient! 的问题但是我在 Karma 单元测试中遇到了更具描述性的错误。我一直在学习 Angu
全部, 我创造: public static final HttpClient DEFAULT_HTTPCLIENT = HttpClients .createDefault(); f
我正在使用 HttpClient fluent api 编写验收测试,但遇到了一些麻烦。 @When("^I submit delivery address and delivery time$")
有人可以分享如何配置现代 HttpClient 4.5.3 以重试失败的请求并在每次重试前等待一段时间吗? 到目前为止,我似乎正确理解了 .setRetryHandler(new DefaultHtt
我在使用 java 中的 HttpClient 库时遇到问题。 目标网站在 SSL ( https://www.betcris.com ) 上,我可以从该网站加载索引页面就好了。 但是,显示不同运动赔
所以我的应用涉及大量网络调用(可能连接到 10 个不同的服务器)和获取数据。从我读过的几篇文章中,建议重用 HTTPClient 实例,因为它可以防止资源(套接字等)的浪费。但是我发现围绕可扩展且健壮
我正在调用一个外部 API,并希望我的 API 可以进行单元测试。为此,我正在尝试包装 HttpClient。我现在只需要一种方法。 这是我的界面。 public interface IHttpCli
出于调试目的,我希望看到将要发送的原始请求。有没有一种方法可以直接从 HttpPost 或 HttpClient 的API中获得没有HTTP监视器的信息? 我发现了一些“几乎”重复的问题,但不是针对这
我正在尝试在小型 WebAssemply 应用程序(使用 .NET 5 创建)中测试 HttpClient。program.cs 包含以下语句来添加 HttpClient 服务: builder.Se
我在 Application_Start 事件中创建了 HttpClient 的单个实例,以便在 Global.asax.cs 中的应用程序中重用 应用程序启动中的代码: protected
我对此有点新手...基本上我需要运行一个脚本来从谷歌趋势下载.csv 文件。我按照这个reference写了下面的代码,代码如下: HttpClient client = new Defau
我正在尝试实现一个基本的 1 spout - 1 bolt Storm 拓扑。我有一个 Storm Bolt,可以使用 Apache HttpClient (4.3.1) 发出 HTTP 请求。但是,
我正在尝试在我的 Xamarin.Forms 移动应用程序中使用 HttpClient 创建网络服务层。 没有单例模式 单例模式 在第一种方法中,我在每个新请求中创建新的 http 客户端对象通过移动
在下面的示例中,我创建了一个 Java 11 httpClient,然后创建了多个并发 HttpRequest。 这是不好的做法吗? 每个 HttpRequest 都应该有自己的 HttpClient
我正在开发一个 Drupal 8 自定义模块。我在任何节点类型中都有两个字段(url 和文本 html 字段)。这是该模块所期望的功能: 该模块将抓取“url字段”的页面并复制html代码以将它们粘贴
我正在为 httpclient 使用 apache httpcompnonents 库。我想在多线程应用程序中使用它,其中线程数会非常高,并且会有频繁的 http 调用。这是我用来在执行调用后读取响应
最近我将我的代码库从 .net core 1.0 迁移到 2.0 。之后,我随机收到错误 “使用 System.Net.Http.HttpClient 时服务器返回无效或无法识别的响应错误”。我在 1
我有该代码: while(!lastPage && currentPage < maxPageSize){ StringBuilder request = new Strin
我的应用程序使用 Apache HTTPClient 4.3.5 发送 HTTP 请求并获得响应。 我想弄清楚应用程序收到了什么响应。 以下是日志片段- [Jan 04 2015 05:38:14.1
如何从 HttpClient 类型的现有对象获取 cookie? 我正在使用 HttpClient 版本 4.3.3,它不再有方法 httpClient.getCookieStore() 了。 最佳答
我是一名优秀的程序员,十分优秀!