C# 在方法处理C时显示计时器#

C# 在方法处理C时显示计时器#,c#,C#,我想显示方法处理并返回其响应时经过的时间(以秒为单位)。也许它将与任务或线程一起完成,但我并不是真的能够实现它。 任何帮助都将不胜感激 谢谢 public function() { while(wait for getAllInformation() function is processing) { Console.Write("Elapsed time... "+ some timer which shows time in seconds); } }

我想显示方法处理并返回其响应时经过的时间(以秒为单位)。也许它将与任务或线程一起完成,但我并不是真的能够实现它。 任何帮助都将不胜感激

谢谢

public function()
{
    while(wait for getAllInformation() function is processing)
    {
        Console.Write("Elapsed time... "+ some timer which shows time in seconds);
    }
}
诸如此类:

public async Task MyMehod()
{
            Task<IEnumerable<int>> infoGetTask = GetAllInformation();

            Stopwatch stopwatch = Stopwatch.StartNew();

            while (!infoGetTask.IsCompleted)
            {
                Console.Write($"Elapsed time... {Math.Round(stopwatch.Elapsed.TotalSeconds, 0)}");
                await Task.Delay(1000);
            }

            foreach (int e in infoGetTask.Result)
            {
                Console.WriteLine(e);
            }
        }

        public async Task<IEnumerable<int>> GetAllInformation()
        {
            await Task.Delay(3000);

            return new int[3] { 1, 2, 3 };
        }
public异步任务MyMehod()
{
任务infoGetTask=GetAllInformation();
秒表秒表=Stopwatch.StartNew();
而(!infoGetTask.IsCompleted)
{
Write($“运行时间…{Math.Round(stopwatch.appeased.TotalSeconds,0)}”);
等待任务。延迟(1000);
}
foreach(infoGetTask.Result中的int e)
{
控制台写入线(e);
}
}
公共异步任务GetAllInformation()
{
等待任务。延迟(3000);
返回新的int[3]{1,2,3};
}
请注意,为了简单起见,我只检查IsCompleted,但还有两个可能的标志可以/应该检查。

类似的内容:

public async Task MyMehod()
{
            Task<IEnumerable<int>> infoGetTask = GetAllInformation();

            Stopwatch stopwatch = Stopwatch.StartNew();

            while (!infoGetTask.IsCompleted)
            {
                Console.Write($"Elapsed time... {Math.Round(stopwatch.Elapsed.TotalSeconds, 0)}");
                await Task.Delay(1000);
            }

            foreach (int e in infoGetTask.Result)
            {
                Console.WriteLine(e);
            }
        }

        public async Task<IEnumerable<int>> GetAllInformation()
        {
            await Task.Delay(3000);

            return new int[3] { 1, 2, 3 };
        }
public异步任务MyMehod()
{
任务infoGetTask=GetAllInformation();
秒表秒表=Stopwatch.StartNew();
而(!infoGetTask.IsCompleted)
{
Write($“运行时间…{Math.Round(stopwatch.appeased.TotalSeconds,0)}”);
等待任务。延迟(1000);
}
foreach(infoGetTask.Result中的int e)
{
控制台写入线(e);
}
}
公共异步任务GetAllInformation()
{
等待任务。延迟(3000);
返回新的int[3]{1,2,3};
}

请注意,为了简单起见,我只检查IsCompleted,但还有两个可能的标志可以/应该检查。

您应该使用Microsoft的反应式框架来检查。然后您可以简单地执行以下操作:

public int GetAllInformationWithTimer()
{
    using (Observable.Interval(TimeSpan.FromSeconds(1.0))
        .Subscribe(x => 
            Console.WriteLine("Elapsed Time: {0} seconds", x + 1)))
    {
        return GetAllInformation();
    }   
}

只需获取“System.Reactive”即可获得所需的库。

为此,您应该使用Microsoft的Reactive框架。然后您可以简单地执行以下操作:

public int GetAllInformationWithTimer()
{
    using (Observable.Interval(TimeSpan.FromSeconds(1.0))
        .Subscribe(x => 
            Console.WriteLine("Elapsed Time: {0} seconds", x + 1)))
    {
        return GetAllInformation();
    }   
}

只需获取“System.Reactive”即可获得所需的库。

您应该在单独的任务中进行计时。与功能完全分离。部分代码显示和更新时间不应与
功能混用。它们是完全不同的东西。在启动函数之前,您启动计时器,在函数完成后,您应该停止计时器。您应该在单独的任务中进行计时。与功能完全分离。部分代码显示和更新时间不应与
功能混用。它们是完全不同的东西。在启动函数之前,您启动计时器,在函数完成后,您应该停止计时器。虽然下面的解决方案有效,但也将对此进行探讨。非常感谢。@user3728843-反应式框架非常强大。我几乎可以用它来完成任务和事件所能做的任何事情,而且它可以做的更多。非常感谢。@user3728843-反应式框架非常强大。我几乎可以将它用于任务和事件所能做的任何事情,而且它能做的更多。@user3728843我很高兴它能帮助您!如果您能将我的答案标记为接受或投票,我将不胜感激(:@user3728843我很高兴它对您有所帮助!如果您能将我的答案标记为接受或投票,我将不胜感激(: