在C#中从getter或setter调用异步方法最优雅的方法是什么?
这里有一些伪代码可以帮助解释自己.
async Task<IEnumerable> MyAsyncMethod()
{
return await DoSomethingAsync();
}
public IEnumerable MyList
{
get
{
//call MyAsyncMethod() here
}
}
Run Code Online (Sandbox Code Playgroud) 我想有一个特定的线程,在这个单独的线程中为任务和进程任务排队.应用程序将根据用户使用情况制作任务,并将其排入任务队列.然后单独的线程处理任务.即使队列为空,保持线程处于活动状态并使用它来处理排队任务也是至关重要的.
我已经尝试了几个TaskSchedulerwith的实现BlockingCollection并将并发限制为只有一个线程,但是当队列变空并且任务由其他线程处理时,似乎线程被释放.
你能否至少向我推荐一些如何实现这一目标的消息来源?
tl; dr尝试限制一个特定线程来处理动态添加到队列的任务.
EDIT1:
这是使用WCF和.NET framework 4.6的实验性Web应用程序.在WCF库中,我试图用一个线程处理任务来实现此行为.这个线程必须使用外部dll库初始化prolog,然后使用prolog.如果在进程中使用了其他线程,则库会抛出AccessViolationException.我做了一些研究,这很可能是因为该库中的线程管理不当.我实现了我到处都有锁的工作方式.我现在正在尝试重新实现并使其异步,因此我不会使用锁定来阻止主线程.
我不在我的电脑上,但是当我今天晚些时候回家时,我提供了一些代码.
我读到:.NET Dispatcher,适用于 .NET Core?
我无法应用这两种解决方案。
知道如何从 .net-core 3.1 访问调度程序吗?
重要信息克莱门斯解决方案效果很好。此外,直接从 Visual Studio 重新加载项目的优点是可以告诉您有关 .csproj 文件中隐藏的问题的更多信息。我的 UseWPF 与 UseWpf 不匹配!