gpt4 book ai didi

c# - 任务和 TAP 异步模式 : differences bwteewn factory. StartNew 和 TaskEx.Run

转载 作者:太空宇宙 更新时间:2023-11-03 22:00:29 24 4
gpt4 key购买 nike

我正在使用新的 TAP 模式进行探测,使用 Task 和 CTP 来实现异步方法。

我有以下代码:

private async void btnAsync01_Click(object sender, RoutedEventArgs e)
{
UpdateTxtLog("Enter in button Async01: " + System.DateTime.Now);
double result = await method01Async();
UpdateTxtLog("exit in button Async01: " + System.DateTime.Now);
UpdateTxtLog("result: " + result.ToString());
}

是让我测试异步方法的 GUI 按钮。

我可以有 method01Aync 的以下实现。

首先:

private async Task<double> method01Async()
{
return await Task.Factory.StartNew<double>(slowMethod);
}


private double slowMethod()
{
double doubleDummy = 0;
for (double i = 0; i < 1000000000; i++)
{
doubleDummy++;
}
return doubleDummy;
}

第二

private Task<double> method01Aync()
{
return Task.Factory.StartNew<double>(() =>
{
//O métodos auxiliares lentos... etc.
double doubleDummy = 0;
for (double i = 0; i < 1000000000; i++)
{
doubleDummy++;
}
return doubleDummy;
});
}

第三

private Task<double> method01Aync()
{
return TaskEx.Run<double>(() =>
{
double doubleDummy = 0;
for (double i = 0; i < 1000000000; i++)
{
doubleDummy++;
}
return doubleDummy;
});
}

第四 私有(private)任务方法 01Async() { 返回 TaskEx.Run(slowMethod);

菲斯

private Task<double> method01Async
{
return TaskEx.Run<double>(() =>
{
return metodoLento();
});
}

我的结果是实现 1 和 4 大约需要 22 秒。同时完成另外两个需要 5 秒。为什么会存在这种差异?在实现1和4中,只使用了一个与循环代码相同的辅助方法。

我注意到,如果我使用 slowMethod() 作为任务构造函数的参数,速度会非常慢,而如果我在 TaskEx 或任务工厂中使用委托(delegate),速度会很快。为什么会这样?有什么区别?

使用 Task.Factory 和 TaskEx.Run 有什么区别?

在 TAP 模式下使用异步任务的最佳实践是什么?

最佳答案

性能测试是一个棘手的主题。

当您仅使用循环和计数器时,试图“欺骗”编译器认为有工作要做很可能会导致不一致的行为。

这是在提到计时之前没有预热这一事实之前,这很可能是在 Debug模式打开的情况下完成的,计时代码本身没有显示。

总而言之 - 假设您编写调用长期运行进程的方式的微小变化在现实世界中不会对您的性能产​​生实质性影响。 p>

关于c# - 任务和 TAP 异步模式 : differences bwteewn factory. StartNew 和 TaskEx.Run,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10340643/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com