提问者:小点点

C#异步等待在语句流之前运行


我已经编写了一个C#应用程序,它接受字段输入并通过网络发送一些数据。

private void btnNext_Click(object sender, RoutedEventArgs e)
{
    SendDetail_Click();
}
 
private async void SendDetail_Click()
{
    try
    {
        bool isNumOnly1 = Textbox1.Text.Any(char.IsLetter);
        bool isNumOnly2 = Textbox2.Text.Any(char.IsLetter);
        
        if(!isNumOnly1 || !isNumOnly2)
            return;
        
        bool boolVali = await System.Threading.Tasks.Task.Run(() => callNetworkMsg());

        while (true)
        {
            await Task.Delay(1000);
        }
    }
    catch(Exception e)
    {
    }
}

上面是我的代码段。

问题是当我在验证(如果语句检查)发生之前运行应用程序时,await被调用并发送网络消息。但是如果我在if条件上放置一个断点,验证将发生,然后转到await函数。

为什么会出现这种情况,如何预防?请指教。


共1个答案

匿名用户

请尝试以下操作:

>

  • 通过更改void==>的返回类型来返回任务;任务

    将onclick更改为同步方法

    专用异步任务btnNext_Click(object sender,RoutedEventArgs e){等待SendDetail_Click();}

    专用异步任务SendDetail_Click(){try{bool isNumOnly1=textbox1.text.any(Char.IsLetter);bool isNumOnly2=textbox2.text.any(Char.IsLetter);

          if(!isNumOnly1 || !isNumOnly2)
              return;
    
          //If callNetworkMsg is async, keep this,
          await System.Threading.Tasks.Task.Run(async () => {
                  callNetworkMsg());
                  return Task.FromResult(1);
          }
    
          //Use this if callNetworkMsg is async/Task
          //await callNetworkMsg()
      }
      catch(Exception e)
      {
      }
    

    }

  • 相关问题