2013-03-06 52 views
10

我需要下面的調用有可能在同便攜式類庫中:便攜式類庫與異步等待和的GetType()IsValueType

public class Foobar 
{ 
    void Foo() 
    { 
     var b = GetType().IsValueType; //<-- 2 
    } 

    async Task<IEnumerable<T>> Bar<T>() 
     where T : class, IBaz, new() 
    { 
     return await Task.Factory.StartNew(() => new List<T>(new[] //<-- 1 
      { 
       new T {Qux = Guid.NewGuid().ToString()} 
      })); 
    } 

    interface IBaz 
    { 
     string Qux { get; set; } 
    } 
} 

隨着設置以下的目標框架:

  • 。 .NET框架4.5
  • 的Sliverlight 5級
  • 的Windows Phone 8
  • 。網絡的Windows Store應用程序

我得到這個生成錯誤:
無法找到由「異步」修改所需的所有類型。你是針對錯誤的框架版本,還是缺少對程序集的引用?

我試圖安裝bcl但仍然得到相同的錯誤。 如果我刪除Sliverlight目標的異步工作,但然後我失去了Type類的IsValueType道具...

+3

我沒有看到任何理由,該方法是'async'。只要刪除'async','await',就完成了。除此之外,我甚至不明白爲什麼這個操作需要在線程池線程中發生;生成一個單一的GUID是一個*非常*快速的操作。開始線程池線程會讓你失去更多的時間。 – Servy 2013-03-06 18:40:11

+0

該示例純粹是爲了重新編譯編譯錯誤,並不能說明解決方案的結構。 – jaimie 2013-03-06 23:54:13

回答

12

您需要安裝Microsoft.Bcl.Async

+1

謝謝,很高興這件事很簡單,我錯過了... – jaimie 2013-03-07 09:17:01