【发布时间】:2016-09-15 12:55:20
【问题描述】:
我的项目中有两个帖子,一个是异步的,第二个帖子是正常的,但依赖于帖子 1。
post 1 以字符串形式返回“success”。如果 post2 在 post 1 之前响应,这里会发生什么,那么它会给出错误。所以我想做的是等到帖子 1 在他的回复中返回“success”。
我不明白该怎么做。请建议。以下是我的发帖请求。
// 发布 1
startAsync("https://www.example.com", webClient, sPostData);
// 帖子 2 : 这取决于上面的帖子 1。我希望在回复之前完成帖子 1。
html = oClient.Post("https://example.com" + "?"+sPostParameter, "");
新编辑
private async void startAsync(string url, ExtendedWebClient oExtendedWebClient, string sParam)
{
await CreateMultipleTasksAsync(url, oExtendedWebClient, sParam);
}
private async Task CreateMultipleTasksAsync(string url, ExtendedWebClient oExtendedWebClient, string sParam)
{
try
{
Task<int> download1 = oExtendedWebClient.ProcessURLAsync(url, oExtendedWebClient, sParam);
Task<int> download2 = oExtendedWebClient.ProcessURLAsync(url, oExtendedWebClient, sPostData);
Task<int> download3 = oExtendedWebClient.ProcessURLAsync(url, oExtendedWebClient, sPostData);
Task<int> download4 = oExtendedWebClient.ProcessURLAsync(url, oExtendedWebClient, sPostData);
Task<int> download5 = oExtendedWebClient.ProcessURLAsync(url, oExtendedWebClient, sPostData);
// Await each task.
int length1 = await download1;
int length2 = await download2;
int length3 = await download3;
int length4 = await download4;
int length5 = await download5;
}
catch (Exception ex)
{
ErrorLog.createLog("ex.StackTrace = " + ex.StackTrace + " ex.tostring = " + ex.ToString());
}
}
async Task<int> ProcessURLAsync(string url, ExtendedWebClient oExtendedWebClient, string sParam)
{
byte[] PostData = System.Text.Encoding.ASCII.GetBytes(sParam);
var byteArray = await oExtendedWebClient.UploadDataTaskAsync(url, PostData);
//DisplayResults(url, byteArray);
return byteArray.Length;
}
我使用这样的 startAsync 方法 startAsync("https://www.example.com", webClient, sPostData);
这里我想等到这个结束执行
【问题讨论】:
-
这正是
await所做的,它等待操作完成。这究竟是如何失败的? -
您好,感谢您的考虑。它不会在 await 等待并去执行下一行
-
你能展示表达上述调用的完整代码吗?
-
@Karan 我们需要查看更多代码,方法是如何声明的等等......现在正在猜测
-
@Karan:您显示的代码不会产生您所描述的行为。与其模糊地描述整个代码的样子,不如展示一个完整的(和最小的)示例来说明问题。