我正在研究MVC 6应用程序(DNX Core 5.0框架).不幸的是,我找不到任何pdf导出库.
任何帮助将不胜感激.
目标: 我想对页面加载时相交的一组元素执行一个操作,并单独处理所有其他元素(当前不相交)。
问题: 每个观察者都有自己的回调,我无法同步获取一组观察者的结果。
可能的解决方案: 如果可以首先询问相交观察者该元素是否相交。据我所知,没有这样的功能,所以每个想法或帮助将不胜感激。
我想在服务中注入我的强类型集线器,但我不喜欢 Microsoft 所示示例中的某些内容 - https://docs.microsoft.com/en-us/aspnet/core/signalr/hubcontext?view =aspnetcore-2.2(注入强类型 HubContext)
public class ChatController : Controller
{
public IHubContext<ChatHub, IChatClient> _strongChatHubContext { get; }
public ChatController(IHubContext<ChatHub, IChatClient> chatHubContext)
{
_strongChatHubContext = chatHubContext;
}
public async Task SendMessage(string message)
{
await _strongChatHubContext.Clients.All.ReceiveMessage(message);
}
}
Run Code Online (Sandbox Code Playgroud)
在这个例子ChatHub中耦合到ChatController.
所以我想注入用通用接口参数定义的集线器本身,并且不会在我的服务中定义它的具体实现。这是示例代码
public interface IReportProcessingClient
{
Task SendReportInfo(ReportProgressModel report);
}
Run Code Online (Sandbox Code Playgroud)
public class ReportProcessingHub : Hub<IReportProcessingClient>
{
public async Task SendMessage(ReportProgressModel report)
{
await Clients.All.SendReportInfo(report);
}
}
Run Code Online (Sandbox Code Playgroud)
public class ReportInfoHostedService : IHostedService, IDisposable
{
private readonly Hub<IReportProcessingClient> …Run Code Online (Sandbox Code Playgroud) signalr signalr-hub .net-core asp.net-core asp.net-core-signalr
我有一个程序正在执行长时间运行的任务,该程序应该在程序启动时启动,并且应该可以在此后的任何时刻重新启动。
我的目的是,如果调用“重新启动”,则会发生以下情况:
我想使用 async/await 并仍然锁定启动所有任务的过程,以确保在上一个启动/重新启动完成之前不会进行任何重新启动。
正如我所看到的,由于多种原因,async/await 不适用于锁定状态,因此我最终使用了 SemaphoreSlim,它对我来说非常有用。这是我的代码:
private readonly SemaphoreSlim m_semaphoreSlim;
private CancellationTokenSource m_cancellationTokenSource;
private CancellationToken m_cancellationToken;
public FeedClientService(IList<IFeedConfigurationBuilder> feedConfigs)
{
m_semaphoreSlim = new SemaphoreSlim(1, 1);
m_feedConfigs = feedConfigs;
}
public void Start()
{
Task.Run(() => this.FetchFeeds());
}
public void Restart()
{
if (m_cancellationTokenSource != null) m_cancellationTokenSource.Cancel();
Task.Run(() => this.FetchFeeds());
}
private async Task FetchFeeds()
{
try
{
await m_semaphoreSlim.WaitAsync();
m_cancellationTokenSource = new CancellationTokenSource();
m_cancellationToken = m_cancellationTokenSource.Token;
Task[] tasks = new Task[m_feedConfigs.Count];
for (int i = …Run Code Online (Sandbox Code Playgroud) asp.net-core ×2
.net-core ×1
async-await ×1
c# ×1
dnx50 ×1
javascript ×1
observers ×1
semaphore ×1
signalr ×1
signalr-hub ×1