c#网络文件下载函数(同步及简单异步操作)

目录

一、同步下载

二、异步下载


一、同步下载

直接上代码

先导入命名空间

using System.IO;

        /// <summary>
        /// 下载文件函数
        /// </summary>
        /// <param name="url">下载链接</param>
        /// <param name="filePath">返回文件路径</param>
        /// <returns>bool</returns>
        public bool download(string url,ref string filePath)
        {
            Console.WriteLine("下载");
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
            request.Method = "GET";
            HttpWebResponse response = (HttpWebResponse)request.GetResponse();
            if (response != null)
            {
                Stream stream = response.GetResponseStream();//获取响应的流
                //判断不是文本形式就下载写入
                if (!response.ContentType.ToLower().StartsWith("text/"))
                {

                    if (!Directory.Exists(@"temp\"))//判断文件夹是否存在
                        Directory.CreateDirectory(@"temp\");
                    FileStream outStream = File.Create(@"temp/m3u8.txt");//创建文件
                    filePath = @"temp/m3u8.txt";
                    Stream inStream = response.GetResponseStream();
                    Console.WriteLine(response.GetResponseStream());
                    byte[] buffer = new byte[1024];
                    int i;
                    do
                    {
                        i = inStream.Read(buffer, 0, buffer.Length);
                        if(i > 0)
                            outStream.Write(buffer, 0, i);
                    } while (i > 0);
                    
                    outStream.Close();
                    inStream.Close();
                }
                return true;

            }else
                return false;

        }

 ref string filePath这个形参可以不用管,他是返回路径,写多了的

使用

if (download(text_url.Text.Trim(), ref filePath))
{
         MessageBox.Show("下载成功");
}
else
         MessageBox.Show("下载失败");

问题:上面的方式下载会导致什么问题呢,答案是在下载过程中,其他任务将会全部等待,包括窗口的拖动,那么就显得卡住了一样,直到下载完成。 

二、异步下载

这个就刚好解决了上面的问题

我们新创建一个函数,来定义异步,通过task

        /// <summary>
        /// 异步下载
        /// </summary>
        /// <returns></returns>
        public async Task downloadAsync()
        {
            await Task.Run(() => download(text_url.Text.Trim(), ref filePath));
            Console.WriteLine("下载中");
        }

使用 

Console.WriteLine("开始");
await downloadAsync();
Console.WriteLine("结束");

 加了await 那么该线程就会等待到downloadAsync()方法执行完成后再往下执行,简称同步

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

aizhaiyu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值