Я знаю, что этот вопрос задан раньше, но я не получил правильного ответа после поиска в Google.В чем разница между 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);
После успешного запуска DoSomething
, Task.Run
бросает TaskCanceledException
в то время как Task.Factory.StartNew
работает отлично. Зачем?
дальнейшее чтение: Stephen Clearly on why not use Task.Factory.StartNew
MSDN Link
UPDATE 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;
}
Возможный дубликат [Об использовании задач Task.Start(), Task.Run() и Task.Factory.StartNew()] (http://stackoverflow.com/questions/29693362/regarding-usage-of-task -start-task-run-and-task-factory-startnew) – smoksnes
Нет, это не так. Это не отвечает на мой вопрос, почему возникает исключение throwing. Он описывает то, что я уже знаю. Благодарю. – Milad
Я отбросил ваш вопрос, потому что вы полностью изменили его, аннулировав существующие ответы. Если у вас есть новый вопрос, напишите новый вопрос. – svick