【发布时间】:2020-02-22 00:15:40
【问题描述】:
我有以下代码:
public static async void PopulateMetrics()
{
await Task.Run(() =>
{
if (App.CPUSpeed == 0)
{
var stopWatch = Stopwatch.StartNew();
stopWatch.Start();
ArrayList al = new ArrayList(); for (int i = 0; i < 5000000; i++) al.Add("hello");
App.CPUSpeed = 20000 / stopWatch.ElapsedMilliseconds;
}
});
}
IDE 告诉我异步方法不应返回 void。让它返回 Task<bool> 并返回 true 可以解决这个问题,但需要吗?
在以下之间调用它也会有什么区别:
_ = PopulateMetrics()
和
await PopulateMetrics()
这就是我所拥有的调用方法。请注意,除了 PopulateMetrics 之外,我在每个异步方法中都有异常处理。
if (Connectivity.NetworkAccess == NetworkAccess.Internet)
{
if (Settings.Rev == REV.No && (new[] { 15, 30, 50 }).Contains(Settings.Trk2))
{
_ = ReviewAppAsync(Settings.Trk2);
}
if (App.devIsPhysical && (new[] { 10, 20, 30 }).Contains(Settings.Trk2))
{
_ = CheckLatestVersion();
}
_ = Helper.PopulateMetrics();
_ = Helper.LogStart();
}
【问题讨论】:
-
async void 只能在事件处理程序中使用。否则这种做法很容易引发死锁!因为你正在混合同步和异步处理
标签: c#