所以我正在使用 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(); …
所以我无法理解这里的概念。我有一个使用 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)