代码之家  ›  专栏  ›  技术社区  ›  swabygw

.NET线程不分离?

  •  0
  • swabygw  · 技术社区  · 6 年前

    我有一个sub可以得到视频文件的持续时间。

    Async Sub GetDuration(folder As String)
    
    Dim ffP As New FFProbe
    Dim vInfo As MediaInfo
    
    Dim totalSecs As Double = Await Task.Run(Function()
                                               vInfo = ffP.GetMediaInfo(filep)
                                               If vInfo.Duration.TotalSeconds < 10
                                                Thread.Sleep(20000)
                                               End If
                                               Return vInfo.Duration.TotalSeconds
                                             End Function)
    

    当我在一个短视频(不到10秒)上运行这个程序时,它会像预期的那样让应用程序休眠20秒。但是,在浏览器的另一个选项卡上,我在一个长视频(大于10秒)上运行它,而第一个线程仍在睡眠中……但它也在睡眠,直到20秒过期/通过。所以两个标签都在睡觉,这表明它们实际上是同一个线程当使用async/await对时,vb.net不应该创建单独的线程吗?

    其主要思想是让它们分别运行,这样多个用户就可以独立地获得持续时间。

    1 回复  |  直到 6 年前
        1
  •  0
  •   cy-c    6 年前

    异步和等待模式不是多线程的。使用相同的线程,但该线程中的进程的调度方式使线程不被锁定。在vs中,可以检查调试期间运行的线程。