gpt4 book ai didi

c# - 我必须做什么才能使我的方法可等待?

转载 作者:IT王子 更新时间:2023-10-29 03:54:52 26 4
gpt4 key购买 nike

如何推出自己的异步可等待方法?

我发现在某些情况下编写异步方法非常容易:

private async Task TestGeo()
{
Geolocator geo = new Geolocator();
Geoposition pos = await geo.GetGeopositionAsync();
double dLat = pos.Coordinate.Latitude;
double dLong = pos.Coordinate.Latitude;
}

...但可悲的是,并非任何方法都可以随意地异步;也就是说:这行不通:

private async Task TestAsyncAwait()
{
int i = await TaSLs_Classes.TASLsUtils.GetZoomSettingForDistance(5);
}

...它阻止了我的编译错误,“无法等待 int”;设计时的提示类似地告诉我,“type 'int' is not awaitable”

我也试过,结果一样:

    Task<int> i = await TaSLs_Classes.TASLsUtils.GetZoomSettingForDistance(5);

我必须做什么才能使我的方法可等待?

更新

正如 Linebacker 和 S. Cleary 所指出的(与曾经在 KNBR 上的那只猫有任何关系吗?),这有效:

int i = await Task.Run(() => TaSLs_Classes.TASLsUtils.GetZoomSettingForDistance(5));

...也就是说,它编译——但它从不“移动”。

在运行时,它告诉我应该“等待”对 TestAsyncAwait() 的调用,但如果我这样做,它根本不会编译...

最佳答案

您只需要返回一个可等待对象。 Task/Task<TResult>是一个普遍的选择; Task s 可以使用 Task.Run 创建(在后台线程上执行代码)或 TaskCompletionSource<T> (包装一个异步事件)。

阅读Task-Based Asynchronous Pattern获取更多信息。

关于c# - 我必须做什么才能使我的方法可等待?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13518619/

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