繁体   English   中英

并行http发布请求(多线程)C#

[英]Parallel http post requests (Multithreading) C#

我该如何在c#中发出10个并行的http post请求(同时发送)? 我正在使用xNet库处理请求和响应。 这是代码:

private void getUsersFromGroup(string groupId)
        {
            HttpRequest request = new HttpRequest();
            RequestParams rp = new RequestParams();
            HttpResponse res;
            string resStr;

            rp["offset"] = "0";
            rp["count"] = "1000";
            rp["online"] = "1";                
            rp["group_id"] = groupId;                
            rp["access_token"] = access_token;
            rp["v"] = apiVersion;
            res = request.Post(Api + "users.search", rp);
            resStr = res.ToString();

            var obj = JsonConvert.DeserializeObject<RootObject>(resStr);
            if (obj.response.count != 0)
            {
                foreach (var item in obj.response.items)
                {
                        if (!usersID.Contains(item.id))
                        {
                            usersID.Add(item.id);
                        }

                }

            }

        }

我在foreach循环中调用此方法,也许会有所改变。

public void getUsers()
        {
            foreach (string groupID in groups)
            {
                getUsersFromGroup(groupID);
            }
        }

我希望能够每秒发送3个API请求。 我该怎么做?

如果您不想使用ThreadPool,则可以在分离的线程上运行方法,如下所示:

foreach (var groupId in groupIds) {
    var thread = new System.Threading.Thread(() => getUsersFromGroup(groupId));
    thread.Start();
}

您绝对应该尝试Task.WhenAll。 示例代码如下所示:

public async Task<IEnumerable<UserDto>> GetUsersInParallel(IEnumerable<int> userIds)
{
    var tasks = userIds.Select(id => client.GetUser(id));
    var users = await Task.WhenAll(tasks);

    return users;
} 

public async Task<UserDto> GetUser(int id)
{
    var response = await client.GetAsync("http://youraddress/api/users/" + id)
        .ConfigureAwait(false);
    var user = JsonConvert.DeserializeObject<UserDto>(await response.Content.ReadAsStringAsync());

    return user;
}

有关完整分析和更多代码,请访问我的博客文章: http : //www.michalbialecki.com/2018/04/19/how-to-send-many-requests-in-parallel-in-asp-net-core/

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM