我正在构建一个类库来与API交互。我需要调用API并处理XML响应。我可以看到使用HttpClient
进行异步连接的好处,但是我所做的是纯同步的,所以我看不到使用HttpWebRequest
有什么显著的好处。
如果有人能提供任何线索,我将不胜感激。我不是一个为了使用新技术而使用它的人。
发布于 2021-03-16 21:18:58
对于现在遇到这个问题的任何人,.NET 5.0已经在HttpClient
中添加了一个同步Send
方法。https://github.com/dotnet/runtime/pull/34948
优点以及为什么在这里详细讨论- https://github.com/dotnet/runtime/issues/32125
因此,您可以使用它而不是SendAsync
。例如
public string GetValue()
{
var client = new HttpClient();
var webRequest = new HttpRequestMessage(HttpMethod.Post, "http://your-api.com")
{
Content = new StringContent("{ 'some': 'value' }", Encoding.UTF8, "application/json")
};
var response = client.Send(webRequest);
using var reader = new StreamReader(response.Content.ReadAsStream());
return reader.ReadToEnd();
}
这段代码只是一个简化的例子,它还没有准备好投入生产。
发布于 2019-05-21 23:40:03
public static class AsyncHelper
{
private static readonly TaskFactory _taskFactory = new
TaskFactory(CancellationToken.None,
TaskCreationOptions.None,
TaskContinuationOptions.None,
TaskScheduler.Default);
public static TResult RunSync<TResult>(Func<Task<TResult>> func)
=> _taskFactory
.StartNew(func)
.Unwrap()
.GetAwaiter()
.GetResult();
public static void RunSync(Func<Task> func)
=> _taskFactory
.StartNew(func)
.Unwrap()
.GetAwaiter()
.GetResult();
}
然后
AsyncHelper.RunSync(() => DoAsyncStuff());
如果使用类将异步方法作为参数传递,则可以以安全方式从同步方法调用异步方法。
发布于 2013-01-21 17:24:12
如果您正在构建一个类库,那么您的库的用户可能希望异步使用您的库。我认为这就是最大的原因。
你也不知道你的库将如何被使用。也许用户将处理大量的请求,异步处理将有助于它更快、更高效地执行。
如果您可以简单地做到这一点,请尽量不要将负担放在您的库的用户身上,当您可以为他们处理它时,他们会尝试使流程异步。
我不会使用异步版本的唯一原因是,如果我试图支持一个还没有内置异步支持的旧版本的.NET。
https://stackoverflow.com/questions/14435520
复制相似问题