Я столкнулся со странной ситуацией.Давайте сначала рассмотрим простой пример в веб-формах ASP.NET:
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
<asp:Button ID="testButton" runat="server" Text="Run" OnClick="testButton_Click" />
</ContentTemplate>
</asp:UpdatePanel>
<asp:UpdateProgress ID="UpdateProgress1" runat="server">
<ProgressTemplate>
Loading...
</ProgressTemplate>
</asp:UpdateProgress>
<asp:UpdatePanel ID="UpdatePanel2" runat="server">
<ContentTemplate>
<asp:Label ID="Label1" runat="server"></asp:Label>
</ContentTemplate>
<Triggers>
<asp:AsyncPostBackTrigger ControlID="testButton" EventName="Click" />
</Triggers>
public partial class About : Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected async void testButton_Click(object sender, EventArgs e)
{
Task<string>[] List = new Task<string>[]
{
RunLong1(),
RunLong2()
};
string[] responses = await Task.WhenAll(List);
Label1.Text = responses[0] + " " + responses[1];
}
private async Task<string> RunLong1()
{
await Task.Run(() =>
{
System.Threading.Thread.Sleep(100000);
});
return "finished the async task 1";
}
private async Task<string> RunLong2()
{
await Task.Run(() =>
{
System.Threading.Thread.Sleep(60000);
});
return "finished the async task 1";
}
}
Итак, у меня есть кнопка на панели обновлений, связанная с панелью UpdateProgress.Когда кнопка нажата, запускается панель UpdateProgress и появляется слово «загрузка».Кроме того, эта же кнопка служит триггером для другой панели обновлений, где она отправляет результат.Когда я нажимаю кнопку, два параллельных метода запускаются в параллельном режиме.После того, как они заканчивают свои задачи, отображается сообщение.
Вот это странная вещь.Если время выполнения одного из асинхронных методов превышает 100 000 мсек, то кнопка не отправит сообщение назад.Слово «загрузка» остается там навсегда!Если длительность асинхронного метода составляет менее 100 000 мсек, то, когда я нажимаю кнопку, он запускает оба асинхронных метода RunLong1 и RunLong2, а когда все заканчивается, label1 внутри updatePanel2 отображает текст и слово «загрузка» исчезает.
Почему это происходит?Почему кнопка не отправляет сообщение назад, если один из асинхронных методов длится более 100 секунд?