.NET Core存在类似Dispatcher
的内容吗?
我需要在.NET Core中创建一个线程,并且能够发送要在线程上调用的动作。此外,我希望能够使用可用于TaskScheduler
内容的async/await
。
这是否存在于某个地方?
答案 0 :(得分:3)
仅供参考:您可以同时喜欢codevision和JBSnorro的答案:
手动编辑.csproj文件。项目文件应类似于以下内容(对于Core 3.1,请使用3.1而不是3.0):
<Project Sdk="Microsoft.NET.Sdk.WindowsDesktop">
<PropertyGroup>
<TargetFramework>netcoreapp3.0</TargetFramework>
<UseWPF>true</UseWPF>
</PropertyGroup>
</Project>
如果已卸载项目,请使用内容菜单中的“重新加载项目”。
注意:应添加UseWPF,但还应修改“ Project Sdk”类型。
答案 1 :(得分:1)
它不是内置的,但我的AsyncContext
and AsyncContextThread
types可以在适合您需要的库中使用。
AsyncContext
接管当前主题:
AsyncContext.Run(async () =>
{
... // any awaits in here resume on the same thread.
});
// `Run` blocks until all async work is done.
AsyncContextThread
是一个单独的帖子,有自己的AsyncContext
:
using (var thread = new AsyncContextThread())
{
// Queue work to the thread.
thread.Factory.Run(async () =>
{
... // any awaits in here resume on the same thread.
});
await thread.JoinAsync(); // or `thread.Join();`
}
AsyncContext
提供了SynchronizationContext
以及TaskScheduler
/ TaskFactory
。
答案 2 :(得分:0)
现在,通过.NET Core 3.0,您可以使用Dispatcher
类,但是它仅在Windows以及netcoreapp3.0
TFM下可用,因此您不能在Linux或Mac上部署应用程序。
您应按照以下参数将其添加到CSharp项目中
<PropertyGroup>
...
<UseWPF>true</UseWPF>
...
</PropertyGroup>
,然后您可以在应用程序中使用System.Windows.Threading.Dispatcher
。
答案 3 :(得分:0)
检查.csproj中的SDK参考是否指向Microsoft.NET.Sdk.WindowsDesktop
,请参见here。