2013-04-17 2 views
22

this Task<> constructor을 사용하고 싶습니다. 나는 누군가가 내 코드를 수정할 수있는 권리를 얻을 수없는 것 같습니다.태스크를 시작하지 않고 태스크를 생성하는 방법은 무엇입니까?

또한 작업이 그렇게 구성된 경우 시작되지 않는다고 생각합니까?

내가 생각 생성자는 내가 필요

Task<TResult>(Func<Object, TResult>, Object) 

내 코드 erroring :

인수 1 :에 '방법 그룹'에서 변환 할 수 없습니다 'System.Func<object,int>'

static void Main(string[] args) 
{ 
    var t = new Task<int>(GetIntAsync, "3"); //error is on this line 
    ... 
} 

static async Task<int> GetIntAsync(string callerThreadId) 
{ 
    ... 
    return someInt; 
} 
+0

내가 혼란 스러워요의 Unwrap()를 사용하여 선호, 당신의 방법은 이미'async', 왜 당신은'다른 묶어야 싶어 작업'? – svick

+0

:-) 실제로 [this] (http://stackoverflow.com/questions/16054467/does-task-runsynchronously-work-recursively) 스레드에 댓글을 달았습니다. –

+0

글쎄,이 방법을 사용하면 unstarted'Task'이지만'async' 메쏘드에서 리턴 된 것과 같은 'Task'가 아닙니다. – svick

답변

19
var t = new Task<int>(() => GetIntAsync("3").Result); 

또는

는 람다를 사용하지 , 당신은 정적이 같은 방법을 쓸 필요가

var t = new Task<int>((ob) => GetIntAsync((string) ob).Result, "3"); 
: 다음

private static int GetInt(object state) 
{ 
    return GetIntAsync(((string) state)).Result; 
} 

그리고 :

var t = new Task<int>(GetInt, "3"); 
+0

내가 물어 본 것과 다른 생성자를 사용하고 있지 않습니까? –

+0

답변을 업데이트했습니다. –

+0

첫 번째 생성자는 클로저를 사용하여 매개 변수를 전달하고 두 번째 생성자는 상태를 사용하여 매개 변수를 전달합니다. –

-1
//creating task 
    var yourTask = Task<int>.Factory.StartNew(() => GetIntAsync("3").Result); 

    //... 

    int result = yourTask.Result; 

UPDATE :

을 예, 불행히도 태스크. 대신에 위에서 언급 한 바와 같이 코드를 사용

//creating task 
    var yourTask = new Task<int>(() => GetIntAsync("3").Result); 

    //... 

    // call task when you want 
    int result = yourTask.Start(); 
+2

이것은 ** 작성 중 **입니다. 작업. ** 그것을 시작하지 않고 ** 그것을 만들고 싶습니다. – Servy

0

을 내가 대신 Task.Result

Task<int> t = new Task<Task<int>>(async (ob) => 
    await GetIntAsync((string)ob), "3").Unwrap(); 
+0

'Task '에서'Start()'가없는'Unwrap()'은 절대로 시작할 수없는 작업으로 변경됩니다 :'Unwrapped()'작업에서'Start()'를 호출하면' InvallidOperationException' : "약속 스타일의 작업에서는 시작이 호출되지 않을 수 있습니다." 'await t' 또는't.Result'를 사용하면 무한히 기다립니다. @Sel은 나중에'Task ''t'를 시작하는 방법과 그 결과를 가져 오는 방법에 대한 답을 정교하게 만들 수 있습니까? –

관련 문제