.NET 线程不是分开的?
.NET Threads are not separate?
我有一个子程序可以获取视频文件的时长。
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 秒 expired/passed。所以两个选项卡都在休眠,这向我表明它们实际上是同一个线程。使用 Async/Await 对时 VB.NET 不应该创建单独的线程吗?
主要想法是让它们 运行 分开,这样多个用户就可以彼此独立地获得持续时间。
异步和等待模式不是多线程。使用相同的线程,但该线程中的进程以某种方式调度,因此该线程未被锁定。在 VS 中,您可以在调试期间检查您拥有的线程 运行。
我有一个子程序可以获取视频文件的时长。
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 秒 expired/passed。所以两个选项卡都在休眠,这向我表明它们实际上是同一个线程。使用 Async/Await 对时 VB.NET 不应该创建单独的线程吗?
主要想法是让它们 运行 分开,这样多个用户就可以彼此独立地获得持续时间。
异步和等待模式不是多线程。使用相同的线程,但该线程中的进程以某种方式调度,因此该线程未被锁定。在 VS 中,您可以在调试期间检查您拥有的线程 运行。