繁体   English   中英

如何在 C# .NetFramework 4.0 中执行异步和等待(如在 .NetFramework 5.0 中)?

[英]How to Perform Async & Await (like in .NetFramework 5.0) in C# .NetFramework 4.0?

当我添加以下代码来执行异步和等待时,

 namespace loadmultipleimages
 {
    public partial class Form1 : Form
    {
        VideoCapture capture = new VideoCapture();
        delegate void delHugeTask();
     
        public Form1()
        {
           InitializeComponent();
        }
    
        public static /*async*/ Task CopyToAsync( this Stream input, Stream output, CancellationToken cancellationToken = default(CancellationToken))
        {
           return CopyToAsyncTasks(input, output, cancellationToken).ToTask();
        }

        private  IEnumerable<Task> CopyToAsyncTasks(Stream input, Stream output, CancellationToken cancellationToken)
        {
          byte[] buffer = new byte[0x1000];   // 4 KiB
          while (true)
          {
            cancellationToken.ThrowIfCancellationRequested();
            var bytesReadTask = input.Read(buffer, 0, buffer.Length);
            yield return bytesReadTask;
            if (bytesReadTask.Result == 0) break;

            cancellationToken.ThrowIfCancellationRequested();
            yield return output.Write(buffer, 0, bytesReadTask.Result);
          }
       }
    }
 }

此错误在公共部分类Form1 的Form 1下弹出并带有蓝色下划线:Form

   Error    1   Extension method must be defined in a non-generic static class

我知道如果你想使用静态方法,类也必须定义为静态。 但是如何解决这个问题呢?

最好的解决方案是将项目的目标框架更改为 4.8 之类的内容。 我知道支持 .NET 4.0 的唯一原因是继续支持 Windows XP。 在这种情况下,我建议您向做出该业务决策的人退缩:您是否绝对确定要支持Microsoft已经超过 7 年不支持的操作系统 对我来说,这似乎有一些严重的责任问题。

但是,假设你无法说服你的老板支持一个古老的操作系统不是一个好主意,你可以使用Microsoft.Bcl.Async NuGet 包来让async / await工作。 请注意,这仅适用于桌面应用程序,不适用于 ASP.NET 应用程序。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM