- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我编写了一个函数,该函数将使用相对较新的异步/等待模式在线程上运行任何函数,并稍后通过可选的回调方法通知调用者。该功能非常简单,如下所示:
private async void DoOperationAsync<T>(Func<T> operation, Action<T> resultAction = null)
{
if (operation == null)
throw new ArgumentNullException("operation");
var result = await Task<T>.Factory.StartNew(operation);
// Notify someone that this finished
if (resultAction != null)
resultAction(result);
}
这对于返回值的函数非常有效。它不适用于返回 void 的函数(或者我不够聪明,无法让它工作)。我可以写一个不假定返回类型的方法的特例。但是,我想知道一些 C# 泛型专家是否可以指出一种在这种情况下处理 void 的方法。有没有不涉及 void 函数的特殊情况的方法?
最佳答案
我有一个 async
/await
intro在我的博客上,您可能会觉得有帮助。
I wrote a function that will, using the relatively new async/await pattern run any function on a thread and notify the caller later via an optional callback method.
这就是 Task.Run
的用途。
I do want that method to run on the calling thread (in my case, it will be the main UI thread of my application in general).
await
已经做到了。
所以,与其编写这样的代码:
DoOperationAsync(() =>
{
// Code that runs on threadpool thread.
return 13;
},
result =>
{
// Code that runs on UI thread.
MessageBox.Show(result.ToString());
});
只需这样做:
var result = await Task.Run(() =>
{
// Code that runs on threadpool thread.
return 13;
});
// Code that runs on UI thread.
MessageBox.Show(result.ToString());
附言Task.Run
已经具有处理有和没有返回值的委托(delegate)所需的所有重载。
关于C# 泛型和 void 的特例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21264712/
数组的倒置计数表示——数组离排序有多远(或接近)。如果数组已经排序,则反转计数为 0。如果数组以相反的顺序排序,则反转计数为最大值。形式上来说,如果 a[i] > a[j] 且 i < j,则两个元素
假设我有两座建筑物,我可以在其中 build 不同的单元。一个建筑物只能同时 build 一个单元,但有一个最多 5 个单元的 fifo 队列,它们将按顺序 build 。每个单元都有构建时间。我需要
我正在执行一个查询并从数组中的数据库中获取以下数据(MySql2 类型对象): +-----------+---------------+---------------+------+------+
在 ghci 中: λ> :t (pure 1) (pure 1) :: (Applicative f, Num a) => f a λ> show (pure 1) :1:1: No ins
在这种特殊情况下,我不会让 file_get_contents() 返回页面,其中 url 包含一个“Ö”字符。 $url = "https://se.timeedit.net/web/liu/db1
这是我的字符串10000000000000000000000000000000000000000000000000000000000 与 60 1/0 组合的字符串。 我想把它放入一个 int Arr
你好, 我有以下代码: 43 while (TRUE) 44 { 45 printf("Swipe Card: "); 46 scanf("%s
我正在寻找在多项式时间内解决的 3-SAT 特例及其算法。任何链接? 谢谢。 最佳答案 阅读 Thomas J Schaeffer 的优秀(但有点难以阅读)论文:The Complexity of S
我正在清理我的一个旧项目。它必须做的一件事是——给定笛卡尔网格系统和网格上的两个正方形,找到所有正方形的列表,连接这两个正方形中心的线将通过这些正方形。 这里的特殊情况是所有起点和终点都被限制在正方形
如果你在“alloc.c”中有如下代码: typedef __typeof__(sizeof(int)) size_t; extern void *calloc (size_t __nmemb, si
我在 Ruby 中有一个数组,其值如下 xs = %w(2.0.0.1 2.0.0.6 2.0.1.10 2.0.1.5 2.0.0.8) 等等。我想对数组进行排序,使最终结果应该是这样的: ys =
关于将应用程序提交到 iOS AppStore,我遇到了一个非常独特的困境。 这是一款适用于 1.5 至 3 岁 child 的应用程序,该应用程序背后的想法是通过语音引导您学习动物名称和它们的声音。
我是一名优秀的程序员,十分优秀!