Преобразование кода с vb.net на c# - ожидающая задача

Я уже некоторое время счастливо использую следующую строку кода, и, похоже, она удовлетворительно выполняет свою работу. Я хочу преобразовать его в С#. Я пытаюсь преобразовать:

Dim result as string = Await Task(Of String).Factory.StartNew(Function() MyClass.PerformJob(param1,param2,param3))

Я ввожу следующий код в С#:

string result = await Task<string>.Factory.StartNew((Func<string>) MyClass.PerformJob((param1,param2,param3));

Это вызывает следующую ошибку:

'Cannot convert type 'string' to 'System.Func<string>' 

Я предполагаю, что это связано с передачей параметров так, как я; Я не понимаю, почему это должно работать в VB.NET, а не в С#?

Большое спасибо за вашу помощь.


person Rob C    schedule 29.12.2012    source источник


Ответы (4)


Вы пытаетесь преобразовать результат метода MyClass.PerformJob в Func<string>, когда результат имеет тип string. Использовать это:

string result = await Task<string>.Factory
    .StartNew(() => MyClass.PerformJob(param1,param2,param3));
person RePierre    schedule 29.12.2012

Вам не нужно приводить его к Func, и вам, вероятно, потребуется использовать лямбда-выражение, чтобы получить ваши параметры в вызове PerformJob. Попробуй это.

string result = await Task<string>.Factory.StartNew(() => MyClass.PerformJob(param1,param2,param3));
person ventaur    schedule 29.12.2012

Вы должны заменить «MyClass» на «this» — C# не имеет строгого эквивалента «MyClass»:

string result = await Task<string>.Factory.StartNew(() => this.PerformJob(param1,param2,param3));
person Dave Doknjas    schedule 30.12.2012
comment
Как и vb.net, это имя, которое ОП дал классу, который они создали. Вы думаете о Моем пространстве имен или обо Мне, которое используется вместо этого. - person Mark Hall; 30.12.2012
comment
Нет. «Мой класс» — это ключевое слово в VB, имеющее очень похожее значение на «Я», но немного отличающееся от него. (Поищи это). - person Dave Doknjas; 30.12.2012
comment
Я предполагаю, что после использования Vb.net более 12 лет и никогда не использовал его. Это не должно быть так часто. Спасибо за информацию. :) - person Mark Hall; 30.12.2012
comment
Вы правы - это не обычно. Это один из тех, которые добавляют все, кроме кухонной раковины, на случай, если кому-то понадобятся идеи в эволюции языка программирования VB. - person Dave Doknjas; 30.12.2012
comment
Как уже упоминалось, MyClass был просто (оглядываясь назад, плохой выбор имени!) именем, которое я дал классу. - person Rob C; 30.12.2012
comment
Хорошо - я удивлен, что VB разрешил это. - person Dave Doknjas; 30.12.2012

Предполагая, что PerformJob является Func<string>, я не думаю, что вам нужен актерский состав Func<string>.

string result = await Task<string>.Factory.StartNew(MyClass.PerformJob(param1,param2,param3));
person sa_ddam213    schedule 29.12.2012