小编Mil*_*lad的帖子

Task.Run和Task.Factory.StartNew有什么区别

我知道之前已经问过这个问题,但谷歌搜索后我得不到正确的答案.

我有这些代码行:

Task.Run(() => DoSomething())
    .ContinueWith(t=>Log.Error(t,"Error"), TaskContinuationOptions.OnlyOnFaulted);

Task.Factory.StartNew(() => DoSomething())
    .ContinueWith(t=>Log.Error(t,"Error"),TaskContinuationOptions.OnlyOnFaulted);
Run Code Online (Sandbox Code Playgroud)

成功运行后DoSomething,Task.Run投掷TaskCanceledExceptionTask.Factory.StartNew工作正常.为什么?

进一步阅读: Stephen Clearly为什么不使用Task.Factory.StartNew
MSDN Link

更新2: 示例代码:

private async void button27_Click(object sender, EventArgs e)
{
    var r = new Random(System.DateTime.Now.Millisecond);

    await Task.Factory.StartNew(
        () => {
            Divide(r.Next(100), r.Next(-1, 10));
            Log.Information("Divide Done!");
        },
        CancellationToken.None,
        TaskCreationOptions.DenyChildAttach,
        TaskScheduler.Default)
    .ContinueWith(
        t => {
            Log.Error(t.Exception,"There is an exception on Divide");
        },
        TaskContinuationOptions.OnlyOnFaulted);
}

private static void Divide(int a, int b)
{
    var c = a/b;
}
Run Code Online (Sandbox Code Playgroud)

c# multithreading task task-parallel-library c#-4.0

5
推荐指数
1
解决办法
2939
查看次数

如何通过任务使用 Clipboard.GetText?

我正在编写一个 Windows 窗体应用程序,该应用程序可以自动化旧软件。为了在该软件和我的应用程序之间传输信息,我使用剪贴板。单击旧软件上的按钮会将一些信息放入剪贴板中。

为了使用Clipboard.GetText我应该从 Windows 窗体中调用它。但我不希望一切都在 UI 线程上。

在另一个任务中调用 Clipboard.GetText 时,我得到它说你应该从 STAThread 调用 Clipboard.GetText。

c# clipboard multithreading task

3
推荐指数
1
解决办法
1694
查看次数