2016-04-06 20 views
0

Arayanın bir Görev ve çağrılacak Yöntem NonAsynch olduğu Asp.Net Identity UserStore için bir katmanı yazıyorum.NonAsync Yöntemi İçin Async Wrapper Oluşturma

Task IUserSecurityStampStore<T, string>.SetSecurityStampAsync(T user, string stamp) 
{ 


    var res = Utility.SetSecurityStamp(user, stamp); // needs to be called as Async 

    var identityUser = ToIdentityUser(res); 

    SetApplicationUser(user, identityUser); 

    return ??? ; // How do i get a task to return here ? 

} 

Bir Görev'i res ve damga dışı durumuna nasıl döndürebilirim? Task.FromResult denedim, ancak yalnızca bir tür argümana izin verildiğini söylüyor.

+0

Sorununuzla ilgili çok kafa karıştırıcı ... Muhtemelen sadece Görev 'FromResult' s olution (eğer durum böyle ise, async siganture/be 'await' ile uyumlu olacak şekilde senkronize bir yönteme ihtiyaç duyduğunuzu açıkça belirtmek için sorunuzu düzenlemek isteyebilirsiniz) –

+0

@AlexeiLevenkov Task.FromResult bir tip argüman gerektirdiğini söylüyor. Ben sadece bir sonuç res ve damga – Deb

cevap

1

Task.Run Yani kod böyle bir şey haline gelebilir kullanarak Task içine Utility.SetSecurityStamp yöntemin çağrıyı sarın:

async Task IUserSecurityStampStore<T, string>.SetSecurityStampAsync(T user, string stamp) 
{ 
    var res = await Task.Run(() => Utility.SetSecurityStamp(user, stamp)); 
    var identityUser = ToIdentityUser(res); 
    SetApplicationUser(user, identityUser); 
} 

Yoksa sadece yöntem awaitable yapmak için Task.FromResult kullanabilirsiniz:

async Task IUserSecurityStampStore<T, string>.SetSecurityStampAsync(T user, string stamp) 
{ 
    var res = Utility.SetSecurityStamp(user, stamp); 
    var identityUser = ToIdentityUser(res); 
    SetApplicationUser(user, identityUser); 

    await Task.FromResult(0); 
} 
+0

damga döndürmek isteyin ama yardımcı yöntemi benim üzerinde hiçbir denetim var olmayan bir nonSync vardır. Kullanamazsınız – Deb

+0

senin Utility.SetSecurityStamp yönteminin dönüş tipi nedir? Uzun süren bir koşu süreci mi? – Thomas

+0

T türünü döndürür ve bazı DB işlemlerini yapar, bu nedenle evet uzun bir süre çalışabilir. – Deb