我在vb.net(VS 2017)中有一个使用4.7框架的程序,其中一个函数的处理时间太长,中断了消息泵送并导致超时错误。为了解决这个问题,我想使用任务并等待异步运行该函数。 (对我来说是新的)。我知道要做到这一点,我需要创建一个异步函数(使用async关键字),该函数使用await调用另一个异步函数,然后该异步函数进行处理。问题是如何使我自己的函数异步,该函数在内部不使用由await调用的预定义异步过程。为此,似乎我需要为我的函数定义一个GetAwaiter,使其可以使用await进行调用。这是我感到难过的地方。我已经在网上搜索过,并寻找了涵盖该主题的书籍,但我简短地指出了这一点。所有的Web示例都在C#中(我不太熟悉),并且我无法将我发现的创建GetAwaiter的C#代码示例包裹住。例如,在Stephen Toub的博客中有以下内容:
public static TaskAwaiter GetAwaiter(this DateTimeOffset dateTimeOffset)
{
return (dateTimeOffset – DateTimeOffset.UtcNow).GetAwaiter();
}
为DateTimeOffset函数创建一个GetAwaiter。我不理解声明性行,特别是TaskAwaiter GetAwaiter双胞胎以及GetAwaiter关键字后面的括号内容。我确实认为“ this”是指vb中的发件人,DateTimeOffset是获取GetAwaiter的函数的名称,dateTimeOffset是正在传递的值,但我不理解函数名称和值在括号内的组合。如何在vb中重写此行?是否有任何涵盖任务/等待功能的优质综合书籍,文章等-尤其是当您必须创建一个新的异步函数时,该函数未预先打包并包含在.net中,并且包含vb示例。我找到了迈克尔·肯尼迪(Michael Kennedy)讲的非常有启发性的youtube演示,但正如我发现的所有其他示例一样,它依赖于可使用await调用的预定义异步函数。我需要把头放在水上-表面在哪个方向?