小编Ale*_*ade的帖子

如何正确使用 HttpClient PostAsync 参数?

所以我正在使用 HttpClient 为我的项目编写一个扩展类,因为我从 HttpWebRequest 转移过来。

做 POST 请求时,如何将普通字符串作为参数发送?没有 json 或任何只是一个简单的字符串。

到目前为止,这就是它的样子。

static class HttpClientExtension
    {
        static HttpClient client = new HttpClient();
        public static string GetHttpResponse(string URL)
        {
            string fail = "Fail";
            client.BaseAddress = new Uri(URL);
            HttpResponseMessage Response = client.GetAsync(URL).GetAwaiter().GetResult();
            if (Response.IsSuccessStatusCode)
                return Response.Content.ReadAsStringAsync().GetAwaiter().GetResult();
            else
                return fail;
        }

        public static string PostRequest(string URI, string PostParams)
        {
            client.PostAsync(URI, new StringContent(PostParams));
            HttpResponseMessage response = client.GetAsync(URI).GetAwaiter().GetResult();
            string content = response.Content.ReadAsStringAsync().GetAwaiter().GetResult();
            return content;
        }
    }
Run Code Online (Sandbox Code Playgroud)

如果你这样看

client.PostAsync(URI, new StringContent(PostParams));
Run Code Online (Sandbox Code Playgroud)

您可以看到我刚刚尝试创建新的 StringContent 并将字符串传递给它,但响应返回 404 页面未找到。我如何正确使用 Post.Async(); …

.net c# httpclient httpwebrequest httpwebresponse

7
推荐指数
1
解决办法
3万
查看次数

Parallel.Foreach 在幕后做了什么?

所以我无法理解这里的概念。我有一个使用 Parallel 类和 Foreach 方法的方法。但我不明白的是,它是否会创建新线程以便更快地运行该函数?

让我们以此为例。我做了一个普通的 foreach 循环。

private static void DoSimpleWork()
        {
            foreach (var item in collection)
            {
                //DoWork();
            }
        }
Run Code Online (Sandbox Code Playgroud)

它将做的是,它将获取列表中的第一项,分配方法 DoWork(); 并等待它完成。简单,简单,有效。

现在.. 如果我这样做,我对三种情况感到好奇。

Parallel.ForEach(stringList, simpleString =>
            {
                DoMagic(simpleString);
            });
Run Code Online (Sandbox Code Playgroud)

这会将 Foreach 分成 4 个块吗?所以我认为正在发生的是它需要列表中的前 4 行,将每个字符串分配给每个“线程”(假设并行创建 4 个虚拟线程)完成工作,然后从该列表中的下 4 行开始?如果那是错误的,请纠正我我真的很想了解这是如何工作的。

然后我们有了这个。本质上是相同的,但有一个新参数

Parallel.ForEach(stringList, new ParallelOptions() { MaxDegreeOfParallelism = 32 }, simpleString =>
            {
                DoMagic(simpleString);
            });
Run Code Online (Sandbox Code Playgroud)

我很好奇的是这个

new ParallelOptions() { MaxDegreeOfParallelism = 32 }
Run Code Online (Sandbox Code Playgroud)

这是否意味着它将从该列表中获取前 32 个字符串(如果列表中有那么多字符串),然后执行与我上面所说的相同的操作?

而对于最后一个。

Task.Factory.StartNew(() =>
            {
                Parallel.ForEach(stringList, simpleString =>
                {
                    DoMagic(simpleString);
                });
            }); …
Run Code Online (Sandbox Code Playgroud)

.net c# parallel-processing foreach multithreading

6
推荐指数
1
解决办法
975
查看次数