Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Bu makale aşağıdaki derleyici hatalarını kapsar:
-
CS1983: Bu zaman uyumsuz bir yöntem olduğundan, dönüş ifadesi '
T' yerine 'Task<T>' türünde olmalıdır. - CS1985: Catch bloğunda bekleyemezsiniz.
-
CS1986: '
await', türün uygun bir 'GetAwaiter' yöntemine sahip olmasını gerektirir. - CS1989: Zaman uyumsuz lambda ifadeleri ifade ağaçlarına dönüştürülemez.
- CS1991: 'Type' bir Windows Çalışma Zamanı olayı ve 'event' normal bir .NET olayı olduğundan 'event' uygulayamıyor.
-
CS1992: '
await' işleci yalnızca 'async' değiştiricisi ile işaretlenmiş bir yöntem veya lambda ifadesi içinde bulunduğunda kullanılabilir. -
CS1994: '
async' değiştiricisi yalnızca gövdesi olan yöntemlerde kullanılabilir. -
CS1995: '
await' işleci, yalnızca bir sorgu ifadesinin başlangıçtaki 'from' yan tümcesinin ilk koleksiyon ifadesi içinde ya da 'join' yan tümcesinin koleksiyon ifadesi içinde kullanılabilir. - CS1996: Kilit deyimi gövdesinde bekleme ifadesi kullanılamaz.
- CS1997: İşlev bir değer döndüren zaman uyumsuz bir yöntem olduğundan, dönüş anahtar sözcüğünü nesne ifadesi takip etmemelidir.
-
CS1998: Bu zaman uyumsuz yöntemde '
await' işleçleri eksiktir ve zaman uyumlu olarak çalıştırılır. Engelleyici olmayan API çağrılarını beklemek için 'await' işlecini veya arka plan iş parçacığında CPU'ya bağlı çalışma yapmak için 'await Task.Run(...)' kullanmayı göz önünde bulundurun. - CS4001: Await ifadesi kullanılamaz.
-
CS4003: '
await' zaman uyumsuz bir yöntem veya lambda ifadesi içinde tanımlayıcı olarak kullanılamaz. - CS4005: Zaman uyumsuz yöntemlerin işaretçi türü parametreleri olamaz.
- CS4006: zaman uyumsuz yöntemlerin parametre listesinde __arglist izin verilmez.
-
CS4007: Tür örneği '
await' veya 'yield' sınırında korunamaz. -
CS4008: '
void' ifadesi beklenecek durumda değil. - CS4009: Void veya int döndüren giriş noktası eşzamansız olamaz.
- CS4010: Zaman uyumsuz ifade temsilci türüne dönüştürülemiyor. Zaman uyumsuz bir ifade void, Task veya Task<T> döndürebilir; bunların hiçbiri türe dönüştürülemez.
-
CS4011: '
await', dönüş türünün '{1}olmasını gerektirir. GetAwaiter()' uygun 'IsCompleted', 'OnCompleted' ve 'GetResult' üyelerine sahiptir ve 'INotifyCompletion' veya 'ICriticalNotifyCompletion' uygular. - CS4012: Eşzamanlı olmayan yöntemlerde veya eşzamanlı olmayan lambda ifadelerinde türündeki parametreler bildirilemez.
-
CS4014: Bu çağrı beklenmediği için, çağrı tamamlanmadan önce geçerli yöntemin yürütülmesi devam eder. çağrının
awaitsonucuna işlecini uygulamayı göz önünde bulundurun. - CS4015: 'MethodImplOptions.Synchronized' zaman uyumsuz bir yönteme uygulanamaz.
- CS4016: Bu, zaman uyumsuz bir yöntem olduğundan, dönüş ifadesi bildirilen tür yerine, "Task" benzeri bir türde olmalıdır.
- CS4027: İfade türü gerekli üyeyi uygulamaz.
-
CS4028: '
await', türün uygun bir 'GetAwaiter' yöntemine sahip olmasını gerektirir. 'System' için bir kullanım yönergesi eksik mi? - CS4029: 'void' türünde bir ifade döndürülemez.
- CS4030: Güvenlik özniteliği bir Async yöntemine uygulanamaz.
- 'SecurityCritical' veya 'SecuritySafeCritical' özniteliğine sahip bir Arabirimde, Sınıfta veya Yapıda asenkron yöntemlere izin verilmez.
-
CS4032: '
await' işleci yalnızca zaman uyumsuz bir yöntem içinde kullanılabilir. Bu yöntemi 'async' değiştiricisi ile işaretlemeyi ve dönüş türünü 'Task<T>' olarak değiştirmeyi göz önünde bulundurun. -
CS4033: '
await' işleci yalnızca zaman uyumsuz bir yöntem içinde kullanılabilir. Bu yöntemi 'async' değiştiricisi ile işaretlemeyi ve dönüş türünü 'Task' olarak değiştirmeyi göz önünde bulundurun. -
CS4034: '
await' işleci yalnızca zaman uyumsuz bir yöntem içinde kullanılabilir. Bu yöntemi 'async' değiştiricisi ile işaretlemeyi göz önünde bulundurun. - CS8031: Zaman uyumsuz lambda ifadesi, bir görev (task) döndüren bir temsilciye dönüştürüldüğünde, bir değer döndüremez.
-
CS8100: '
await' işleci statik betik değişkeni başlatıcısında kullanılamaz. - CS8177: Asenkron yöntemlerin başvuruyla kullanılan yerel değişkenleri olamaz.
-
CS8178: Bir yöntem çağrısı tarafından döndürülen bir başvuru, '
await' veya 'yield' sınırını geçerken korunamaz. - CS8204: Tür hedefi için AsyncMethodBuilder olarak kullanılacak tür için, Task özelliği bildirilen tür yerine hedef türü döndürmelidir.
-
CS8403: IAsyncEnumerable
asyncT< döndürmek için yineleyici bloğu olan yöntem '>' olmalıdır. - CS8411: Zaman uyumsuz foreach deyimi, türün gerekli üye için uygun bir genel örnek veya uzantı tanımı içermemesi nedeniyle türdeki değişkenler üzerinde çalışamaz.
- CS8892: Zaman uyumlu bir giriş noktası bulunduğundan yöntem giriş noktası olarak kullanılmaz.
- CS8935: AsyncMethodBuilder özniteliğine, açık bir dönüş türü olmayan anonim yöntemlerde izin verilmiyor.
- CS8940: Genel bir görev benzeri dönüş türü bekleniyordu, ancak 'AsyncMethodBuilder' özniteliğinde bulunan tür uygun değildi. İlişkisiz genel bir arity türü olmalı ve içeren türü (varsa) genel olmayan olmalıdır.
-
CS9123: '
&' işleci, zaman uyumsuz yöntemlerdeki parametrelerde veya yerel değişkenlerde kullanılmamalıdır. -
CS9330: '
MethodImplAttribute.Async' yöntemlere el ile uygulanamaz. 'async' yöntemini işaretleyin.
İfade gereksinimlerini bekle
- CS1985: Catch yan tümcesinde await kullanılamaz.
-
CS1986: '
await', türün uygun bir 'GetAwaiter' yöntemine sahip olmasını gerektirir. -
CS1992: '
await' işleci yalnızca 'async' değiştiricisi ile işaretlenmiş bir yöntem veya lambda ifadesi içinde bulunduğunda kullanılabilir. -
CS1995: '
await' işleci yalnızca bir sorgu ifadesinde, ilk 'from' yan tümcesinin ilk koleksiyon ifadesi içinde veya bir 'join' yan tümcesinin koleksiyon ifadesi içinde kullanılabilir. - CS1996: lock ifadesinin gövdesinde await ifadesi kullanılamaz.
-
CS4008: '
void' beklenemiyor. -
CS4032: '
await' işleci yalnızca zaman uyumsuz bir yöntem içinde kullanılabilir. Bu yöntemi 'async' değiştiricisi ile işaretlemeyi ve dönüş türünü 'Task<T>' olarak değiştirmeyi göz önünde bulundurun. -
CS4033: '
await' işleci yalnızca zaman uyumsuz bir yöntem içinde kullanılabilir. Bu yöntemi 'async' değiştiricisi ile işaretlemeyi ve dönüş türünü 'Task' olarak değiştirmeyi göz önünde bulundurun. -
CS4034: '
await' işleci yalnızca zaman uyumsuz bir yöntem içinde kullanılabilir. Bu yöntemi 'async' değiştiricisi ile işaretlemeyi göz önünde bulundurun. -
CS8178: Bu çağrı tarafından döndürülen bir başvuru '
await' veya 'yield' sınırında korunamaz. - CS8411: Türü gerekli üye için uygun bir genel örnek veya uzantı tanımı içermediğinden, zaman uyumsuz foreach deyimi tür değişkenleri üzerinde çalışamaz.
- CS4001: İfade beklenemez.
-
CS4003: '
await' zaman uyumsuz bir yöntem veya lambda ifadesi içinde tanımlayıcı olarak kullanılamaz. -
CS4007: Tür örneği '' veya '
awaityield' sınırında korunamaz. -
CS4011: '
await', 'GetAwaiter()' dönüş türünün uygun 'IsCompleted', 'OnCompleted' ve 'GetResult' üyelerine sahip olmasını ve 'INotifyCompletion' veya 'ICriticalNotifyCompletion' uygulamasını gerektirir. - CS4027: Tür gerekli üyeyi uygulamaz.
-
CS4028: '
await', türün uygun bir 'GetAwaiter' yöntemine sahip olmasını gerektirir. 'System' için bir kullanım yönergesi eksik mi? -
CS8100: '
await' işleci statik betik değişkeni başlatıcısında kullanılamaz.
Aşağıdaki öğeler her hatayı nasıl düzelteceklerini açıklar.
await işleci ve awaiter deseni hakkında daha fazla bilgi için Async ve await ile zaman uyumsuz programlama konusuna bakın.
-
asyncdeğiştiricisini,awaitifadesini içeren yöntem veya lambda ifadesine ekleyin (CS1992, CS4032, CS4033, CS4034). Derleyici, zaman uyumsuz askıya alma ve yeniden başlatmayı işleyen durum makinesini oluşturabilmesi içinasyncdeğiştiricisini gerektirir. Bu hatanın üç çeşidi, doğru dönüş türü için bağlama özgü öneriler sağlar. - C# 5 veya daha önceki bir sürümü hedeflediğinizde (
await),catchifadeleri bloklarının dışına taşıyın. C# 6'dan başlayarak, derleyici hemawaithem decatchbloklarındafinallydestekler. Bu hata artık C# 6 ve sonraki sürümlerde üretilmemiştir. -
awaitifadelerinilockdeyim bloklarının dışına taşı (CS1996). Bir kilidi tutarken eşzamansız askıya almak, deadlock riskini artırır. Kilit, diğer kodların aynı kilidi bekleyebileceği iş parçacığı geçişleri boyunca tutulur. -
Sorgu ifadelerini
await, yalnızca ilkfromyan tümcenin ilk koleksiyon ifadesinde veya birjoinyan tümcenin koleksiyon ifadesinde (CS1995) görünecek şekilde yeniden yapılandırın. Diğer sorgu yan tümceleri, eşzamansız askıya alma desteği olmayan lambda ifadelerine dönüştürülür. -
GetAwaiter()izleyen erişilebilir bir yöntemi (CS1986, CS4028) kullanıma sunması için beklenen ifadenin türünü değiştirin. türü, deseni doğrudan veya bir uzantı yöntemi aracılığıyla uygulayabilir.GetAwaiteryöntemi mevcutsa ancakusingiçin birSystemyönergeniz yoksa, derleyici CS1986 yerine daha özel CS4028 iletisini üretir. -
GetAwaiter()tarafından döndürülen awaiter türününIsCompleted,OnCompleted, veGetResultüyelerine sahip olduğundan, INotifyCompletion veya ICriticalNotifyCompletion uyguladığından emin olun (CS4011, CS4027). İfade,awaittamamlanma durumunu denetlemek, devamlılıkları kaydetmek ve sonuçları almak için bu üyelere bağlıdır. - Çağrılan yöntemin dönüş türünü
voidTaskTask<TResult> veya olarak değiştirin; böylece sonuç beklenebilir (CS4008).void-dönüşlü bir yöntemi bekleyemezsiniz çünkü tamamlanmayı izlemek veya özel durumları yaymak için bir görev nesnesi yoktur. - Beklenen ifadeyi, awaiter deseni (CS4001) destekleyen bir türle değiştirin.
int,stringve diğer yerleşik türler gibi türlerin birGetAwaiteryöntemi yoktur ve doğrudan beklenemez. - Kullanmadan önce bir başvuru döndüren yöntem çağrısının sonucunu yerel değişkende depolayın
await(CS8178). ** Zaman uyumsuz durum makinesi, referansı geçersiz kılarak farklı bir iş parçacığı veya bağlamda askıya alınıp sürdürülebileceğinden, bir yöntem tarafından döndürülen referans birawaitsınırında korunamaz. - Uygulayın IAsyncEnumerable<T> koleksiyon türüne veya
GetAsyncEnumeratorveCurrentüyeleriyle bir tür döndüren erişilebilir bir yöntem ekleyin (MoveNextAsync).await foreachdeyimi, koleksiyon türünün zaman uyumsuz numaralandırılabilir desenini takip etmesini gerektirir. - Bir yöntem veya lambda ifadesi (
await) içinde adlıasyncherhangi bir yerel değişkeni veya parametreyi yeniden adlandırın. Zaman uyumsuz bağlamlar içinde bağlamsalawaitbir anahtar sözcüktür ve tanımlayıcı olarak kullanılamaz. - İfadeyi
awaitstatik betik değişkeni başlatıcısının dışına ve bir yöntem gövdesine (CS8100) taşıyın. Statik başlatıcılar zaman uyumsuz bir bağlam dışında çalışır, bu nedenleawaitbu konumda kullanılamaz. -
ref struct,awaitveyayieldsınırında örneklerin korunmasına gerek kalmaması için kodu yeniden yapılandırın (CS4007). Zaman uyumsuz durum makinesi yığında yerel değişkenleri depolar veref structtürler tasarım gereği yığına bağlıdır; bunlar askıya alma noktaları arasında yığın depolamaya güvenli bir şekilde taşınamaz.
Asin yöntem imzası gereksinimleri
-
CS1983: Bu zaman uyumsuz bir yöntem olduğundan, dönüş ifadesi '
Task<T>' yerine 'T' türünde olmalıdır. -
CS1994: '
async' değiştiricisi yalnızca gövdesi olan yöntemlerde kullanılabilir. - CS4009: Void veya int döndüren giriş noktası asenkron olamaz.
- CS8892: Zaman uyumlu bir giriş noktası bulunduğundan yöntem giriş noktası olarak kullanılmaz.
- CS8935: AsyncMethodBuilder özniteliğine, açık bir dönüş türü olmayan anonim yöntemlerde izin verilmiyor.
- CS8940: Genel bir görev benzeri dönüş türü bekleniyordu, ancak 'AsyncMethodBuilder' özniteliğinde bulunan tür uygun değildi. İlişkisiz genel bir arity türü olmalı ve içeren türü (varsa) genel olmayan olmalıdır.
-
CS8403: Yineleyici bloğu olan bir yöntemin '
async' olması ve '{1}' türünü döndürmesi gerekir. -
CS9330: '
MethodImplAttribute.Async' yöntemlere el ile uygulanamaz. 'async' yöntemini işaretleyin. - CS4005: Async yöntemler işaretçi türü parametrelere sahip olamaz.
- CS4006: zaman uyumsuz yöntemlerin parametre listesinde __arglist izin verilmez.
- CS4010: Async lambda, temsilci türüne dönüştürülemiyor. Async lambda, void, Task veya Task<T> döndürebilir; ancak bunların hiçbiri dönüş türüne dönüştürülemez.
- CS4012: Türündeki parametreler eşzamansız yöntemlerde veya eşzamansız lambda ifadelerinde bildirilemez.
- CS4015: 'MethodImplOptions.Synchronized' zaman uyumsuz bir yönteme uygulanamaz.
- CS4016: Bu yöntem zaman uyumsuz olduğundan, dönüş ifadesi tür yerine Task türünde olmalıdır.
- CS8031: Temsilci döndüren göreve dönüştürülen zaman uyumsuz lambda ifadesi bir değer döndüremez.
- CS8204: Türün türü için AsyncMethodBuilder olarak kullanılması için, Task özelliği bildirilen tür yerine gerekli türü döndürmelidir.
Aşağıdaki öğeler her hatayı nasıl düzelteceklerini açıklar. Zaman uyumsuz yöntem bildirimleri hakkında daha fazla bilgi için async ve Zaman Uyumsuz dönüş türlerine bakın.
- Dönüş ifadesini zaman uyumsuz yöntemin temel alınan sonuç türüyle (CS1983, CS4016) eşleşecek şekilde değiştirin. Zaman uyumsuz bir yöntem
Task<T>döndürdüğünde,returndeyimi, derleyici tarafından oluşturulanTdeğeri otomatik olarak bir görev içinde sardığı içinTask<T>değil, türünde bir değer sağlamalıdır. CS1983, yöntemTask<T>döndürdüğünde ve ifadeTolduğunda görüntülenir; CS4016 ise dönüş ifadesi türünün eşleşmediği genel durumu kapsar. - Değiştiriciyi
async, soyut yöntemler veya arabirim yöntemi bildirimleri (CS1994) gibi gövdesi olmayan yöntemlerden kaldırın. Değiştirici, derleyicinin durumu makinesi uygulamasını oluşturabilmesi içinasyncyöntem gövdesine ihtiyaç duyar. - Zaman uyumsuz giriş noktasının dönüş türünü Task veya Task<TResult> (CS4009) olarak değiştirin. C# 7.1'den itibaren
Mainyöntemi olabilirasync, ancak geri dönüş türüTaskveyaTask<int>-async voidolmalı veasync intgeçerli giriş noktası imzaları değildir. - Proje hem senkron hem de asenkron bir yöntem (
Main) içerdiğinde bir giriş noktasını kaldırın veya yeniden adlandırın. Derleyici senkron giriş noktasını seçer ve gözardı ettiği asenkron aday için bu uyarıyı verir. - özniteliğini uygulamadan
[AsyncMethodBuilder]önce lambda ifadesine açık bir dönüş türü ekleyin (CS8935). Derleme zamanında özniteliğin belirli bir dönüş türüyle eşleşmesi gerektiğinden, derleyici dönüş türü tahmin edilen anonim yöntem için oluşturucu türünü belirleyemiyor. - Özniteliğinde
[AsyncMethodBuilder]belirtilen türü,MyTaskMethodBuilder<>genel olmayan bir tür (MyTaskMethodBuilder<T>) yerine ilişkisiz genel bir arity türüyle değiştirin. Oluşturucunun, varsa, içerdiği tür de genel olmayan bir tür olmalıdır. Derleyici, oluşturucuyu herhangi bir somut görev benzeri dönüş türü için oluşturabilmesi için bu şekli gerektirir. - El ile
[MethodImpl(MethodImplOptions.Async)]özniteliğini yöntem bildirimindekiasync(CS9330) anahtar sözcüğüyle değiştirin.MethodImplOptions.Asyncbayrağı iç çalışma zamanı kullanımı için ayrılmıştır ve doğrudan kullanıcı koduna uygulanamaz. - Değiştiriciyi
asyncyineleyici blokları içeren ve ya IAsyncEnumerable<T> ya da IAsyncEnumerator<T> (CS8403) döndüren yöntemlere ekleyin.asyncDeğiştirici olmadan, derleyici yöntemini zaman uyumlu bir yineleyici olarak ele alır ve zaman uyumsuz akış durumu makinesi oluşturamaz. - Zaman uyumsuz yöntemlerden (CS4005) işaretçi türü parametreleri kaldırın. İşaretçiler, yürütmenin farklı bir iş parçacığında devam edebileceği uyumsuz askıya alma noktalarında güvenli bir şekilde korunamayan sabit bellek konumlarına referans verir.
- Zaman uyumsuz yöntem parametre listelerinden
__arglistkaldırın (CS4006). Değişken uzunluklu bağımsız değişken listeleri, yığın tabanlı çağrı kurallarına uyumsuz olan yığın tarafından ayrılan zaman uyumsuz durum makinesi ile uyumsuzdur. -
ref,in,outveyaref structgibi Span<T> türlerin parametrelerini, zaman uyumsuz yöntemlerden veya zaman uyumsuz lambda ifadelerinden kaldırın (ReadOnlySpan<T>). Bu parametre türleri yığına bağlıdır ve kümeye ayrılan zaman uyumsuz durum makinesi kapanışında güvenli bir şekilde yakalanamaz. - Hedef temsilci türünü async lambda'nın dönüş türüyle (CS4010) eşleşmesi için değiştirin. Zaman uyumsuz bir lambda,
void, Task veya Task<TResult> döndürebilir ve derleyici bunları farklı dönüş türleri bekleyen genel temsilci türlerine dönüştüremez. -
returnifadesini, genel olmayanTaskdöndüren bir temsilciye atanmış zaman uyumsuz bir lambdadan kaldırın ya da lambda'nın bir değer döndürebilmesi için temsilci türünüFunc<Task<T>>olarak değiştirin (CS8031). Genel olmayanTaskdöndüren temsilci, sonuç döndürmeyen zaman uyumsuz işlemi temsil eder, bu nedenle bir değer döndürmek tür uyuşmazlığına yol açar. - Asenkron yöntemlerden
[MethodImpl(MethodImplOptions.Synchronized)]özniteliğini (CS4015) kaldırın. Bu seçenekSynchronizedtüm yöntem yürütmesi için bir kilit alır, ancak aynı işlevdeki zaman uyumsuz bir yöntem, farklı iş parçacıklarında askıya alınabilir ve yeniden başlatılabilir, bu da kilit semantiğini tanımsız hale getirir. - Özel
AsyncMethodBuildertürünü düzelterek,Tasközelliğinin zaman uyumsuz yöntemin bildirilen dönüş türüyle (CS8204) aynı türü döndürmesini sağlar. Derleyici, son görev nesnesini almak için oluşturucununTasközelliğini kullanır, bu nedenle tür uyuşmazlığı durum makinesinin düzgün çalışmasını engeller.
Asenkron uygulamalar
- CS1989: Zaman uyumsuz lambda ifadeleri ifade ağaçlarına dönüştürülemez.
- CS1991: 'Type', bir Windows Çalışma Zamanı olayı olup 'event' ise normal bir .NET olayı olduğundan, 'event'i uygulayamaz.
- CS1997: İşlev bir değer döndüren zaman uyumsuz bir yöntem olduğundan, dönüş anahtar sözcüğünü nesne ifadesi takip etmemelidir.
-
CS1998: Bu zaman uyumsuz yöntemde '
await' işleçleri eksiktir ve zaman uyumlu olarak çalıştırılır. Engelleyici olmayan API çağrılarını beklemek için 'await' işlecini veya arka plan iş parçacığında CPU'ya bağlı çalışma yapmak için 'await Task.Run(...)' kullanmayı göz önünde bulundurun. -
CS4014: Bu çağrı beklenmediği için, çağrı tamamlanmadan önce geçerli yöntemin yürütülmesi devam eder. çağrının
awaitsonucuna işlecini uygulamayı göz önünde bulundurun. - CS8177: Asenkron yöntemler referans ile geçirilen yereller bulunduramaz.
-
CS9123: '
&' işleci, zaman uyumsuz yöntemlerdeki parametrelerde veya yerel değişkenlerde kullanılmamalıdır. - CS4029: 'void' türünde bir ifade döndürülemez.
- CS4030: Güvenlik özniteliği bir Async yöntemine uygulanamaz.
- CS4031: 'SecurityCritical' veya 'SecuritySafeCritical' özniteliğine sahip bir arabirim, sınıf veya yapı içerisinde asenkron yöntemlere izin verilmez.
Aşağıdaki öğeler her hatayı nasıl düzelteceklerini açıklar. Daha fazla bilgi için bkz: Async ve await ile zaman uyumsuz programlama ve await operatörü.
- Add
awaitişlemcisini, Task veya Task<TResult> döndüren her çağrıya ekleyin ya da eğer sonuçların ihmal edilmesi gerçekten isteniyorsa_ =ile sonucu açıkça atın (CS4014).awaitolmadan, zaman uyumsuz işlem tarafından atılan herhangi bir istisna gözden kaçar ve çağrı yöntemi, işlem tamamlanmadan yürütülmeye devam eder, bu da belirsiz sıralama ve doğruluk hatalarına neden olabilir. -
returndönüş türüTask(genel olmayan) olan zaman uyumsuz bir yöntemden ifadeyi kaldırın veya yöntemin bir değer döndürmesi gerektiğinde dönüş türünüTask<T>(CS1997) olarak değiştirin.Taskdöndüren zaman uyumsuz bir yöntem içinde, derleyici görev sarmalayıcısını oluşturur - bir değer döndürmek, yöntem imzası herhangi bir sonuç vaat etmediğinden, tür uyuşmazlığı yaratır. - Yöntem gövdesine en az bir
awaitifade ekleyin veya değiştiriciyiasynckaldırıp görevi doğrudan döndürün (CS1998). İfade içermeyen birasyncyöntemi tamamen senkron olarak çalıştırılır ve bu da gereksiz bir durum makinesi ek yükü ekler. Yöntem kasıtlı olarak zaman uyumlu bir işlemi sarmalıyorsa,async’ı çıkarıp görevi açıkça döndürmek bu ek yükü ortadan kaldırır. - Lambda ifadesini, bir
asynctürüne () atanırkenExpression<Func<...>>kullanılmaması için (CS1989) yeniden yazın. İfade ağaçları, kodu derleyicinin çözümleyebileceği veya çevirebileceği veri yapıları olarak temsil eder, ancak oluşturanasynckarmaşık durum makinesi bir ifade ağacında yakalanamaz. - Olay uygulamasını değiştirerek hem arabirim bildiriminin hem de uygulayan sınıfın olayın Windows Çalışma Zamanı semantiği mi yoksa normal .NET semantiği mi (CS1991) kullandığı konusunda anlaşabilmesini sağlayın. Bu hata, bir WinRT olayının klasik bir .NET olayı olarak ya da tam tersinin uygulanamadığı Windows Çalışma Zamanı interop senaryoları için geçerlidir.
- Zaman uyumsuz yöntemlerin içindeki parametrelere veya yerel değişkenlere referans veren ifadelerden adres alma operatörünü (
&) kaldırın (CS9123). Asenkron durum makinesi, askıya alma sırasında yakalanan değişkenleri bellek yığınına yeniden konumlandırabilir ve bu da adresi aracılığıyla elde edilen tüm işaretçileri geçersiz kılar. - Zaman uyumsuz yöntemlerden başvuruya göre yerel değişkenleri kaldırın veya bunların bir
awaitsınırını aşmadığından emin olun (CS8177). Zaman uyumsuz durum makinesi yığınla ayrılmış kapanışlarda yerel değişkenleri yakalar ve yığın konumlarına yapılan başvurular askıya alma noktaları arasında güvenli bir şekilde korunamaz. C# 13 ve sonraki sürümlerde, yerel değişkenler bir sınıra yayılmadıkları sürece zaman uyumsuz yöntemlerde kullanılabilir ve bu hata oluşmaz. -
return-return yönteminin sonucunuvoiddöndüren deyimini kaldırın veya çağrılan yöntemi bir değer döndürecek şekilde değiştirin (CS4029). Şunu kullanamazsınız:return SomeVoidMethod();çünküvoid, değer olarak döndürülebilecek bir tür değildir. Yareturnanahtar sözcüğünü kaldırın ve yöntemi tek başına bir ifade olarak çağırın veya çağrılan yöntemin imzasını somut bir tür döndürecek şekilde değiştirin. - Zaman uyumsuz yöntemlerden (
[SecurityCritical])[SecuritySafeCritical]veya gibi güvenlik özniteliklerini kaldırın ya da bu özniteliklerle işaretlenmiş türlerdeki yöntemlerdenasyncdeğiştiricisini kaldırın (CS4031). Kod erişimi güvenlik ek açıklamaları bildirim yöntemine uygulanır, ancak derleyici tarafından oluşturulan zaman uyumsuz durum makinesi, bu güvenlik ek açıklamalarının uygulanamaz olduğu ayrı bir bağlamda çalışır.