NETCore Windows服务的异步调用非静态方法

时间:2019-06-06 13:47:00

标签: asynchronous .net-core static windows-services

我一直在将Windows服务转换为NETCore,并按照简单的指南在完成之前获得预期的结果。 完成之后,我决定应该转换静态方法,以便可以更轻松地实现单元测试,但是这导致我不知道发生了什么。该Windows Service应该基于计时器运行,每隔几秒钟就会调用一次,这是一个来自不同项目的方法,用于执行各种异步调用。尽管存在问题,但似乎从所有方法中删除了静态属性后,我开始出现错误,并说我需要非静态方法的对象引用。 这是我到目前为止所拥有的

        public Task StartAsync(CancellationToken cancellationToken)
    {
        if (timer == null)
        {
            timer = new System.Threading.Timer( (e) => OnElapsedTime(), null,TimeSpan.Zero,TimeSpan.FromSeconds(15) ); 
        }
        return Task.CompletedTask;
    }

    public async void OnElapsedTime()
    {
       await Logic.OnElapsedTime(Client,handler);
    }

我尝试调用的方法是

public class Logic
{

    public async Task<object> OnElapsedTime(HttpClient Client, HttpClientHandler handler)
    { (...)

我似乎无法在没有错误的情况下执行此调用,我之前尝试实例化Logic,并且直到出现提示的发布部分之前都没有错误。对弄清楚正在发生的事情以及是否有可能在不参考静态方法的情况下实现我正在寻找的内容有何帮助?

这是我用来在netCore中设置Windows服务的指南: Guide

1 个答案:

答案 0 :(得分:0)

与此同时,我通过使用Invoke方法找到了解决问题的方法。我还重构了Logic方法,在此期间不接受任何参数,尽管这与我遇到的问题完全无关。

typeof(Logic).GetMethod("OnElapsedTime").Invoke(new Logic(), null)