如何运行异步短信服务?

How to run asynchronously an SMS service?

我要测试如下所示的短信服务,但我希望它 运行 异步。我准备了如下代码,但我怎样才能让它像 async-await 一样工作?

private async void Form1_Load(object sender, EventArgs e)
{
    var url = "http://panel.com/smsgonder1Npost.php";

    //string tur = "Normal";
    //if (turkce.Checked == true) tur = "Turkish";
    string sms1N = "data=<sms><kno>" + kno.Text + "</kno>" +
        "<kulad>" + kad.Text + "</kulad>" +
        "<sifre>" + ksifre.Text + "</sifre>" +
        "<gonderen>" + "SMS TEST" + "</gonderen>" +
        "<mesaj>" + "test message" + "</mesaj>" +
        "<numaralar>" + "number" + "</numaralar>" +
        "<tur>" + "Normal" + "</tur></sms>";

    await XmlPost(PostAddress: url, xmlData: sms1N);
}

private async Task<string> XmlPost(string PostAddress, string xmlData)
{
    using (WebClient wUpload =  new WebClient())
    {
        wUpload.Headers.Add("Content-Type", "application/x-www-form-urlencoded");
        textBox1.AppendText(xmlData);

        Byte[] bPostArray = Encoding.UTF8.GetBytes(xmlData);
        Byte[] bResponse = wUpload.UploadData(PostAddress, "POST", bPostArray);
        Char[] sReturnChars = Encoding.UTF8.GetChars(bResponse);

        string sWebPage = new string(sReturnChars);
        textBox1.AppendText(sWebPage);

        return  sWebPage;
    }
}

添加了新的 嗨,我在下面添加了新代码。它像 httpClient 一样工作吗? 或者你能举个httpClient的例子吗?

  public async string postXMLData(string destinationUrl, string requestXml)
    {
        HttpWebRequest request = (HttpWebRequest)WebRequest.Create(destinationUrl);
        byte[] bytes;
        bytes = System.Text.Encoding.ASCII.GetBytes(requestXml);
        request.ContentType = "application/x-www-form-urlencoded";
        request.ContentLength = bytes.Length;
        request.Method = "POST";
        Stream requestStream =  request.GetRequestStream();
        requestStream.Write(bytes, 0, bytes.Length);
        requestStream.Close();
        HttpWebResponse response;
        response = (HttpWebResponse)request.GetResponse();
        if (response.StatusCode == HttpStatusCode.OK)
        {
            Stream responseStream = response.GetResponseStream();
            string responseStr = new StreamReader(responseStream).ReadToEnd();
            textBox1.AppendText(responseStr);

            return responseStr;
        }
        return null;
    }

how can I make it work as async-await

WebClient 替换为 HttpClient

HttpClient 有(只有)异步方法。 WebClient 是同步的。

附带说明,don't use using 与 HttpClient。

对代码的一个简单更改是使用 WebClient.UploadDataTaskAsync Method.

WebClient,在 .NET Framework 1.1 中引入,自 .NET Framework 2.0 以来一直是异步的。

使用 Event-based Asynchronous Pattern (EAP)Async 后缀方法)是异步的。

自 .NET Framework 4.5 起,它已通过 Task-based asynchronous pattern (TAP)TaskAsync 后缀的方法)进行了扩充。

您可以看到 here 如何 WebClient.UploadDataTaskAsync 使用 WebClient.UploadDataAsync.