2016-09-16 6 views
0

Ist es möglich zu markieren, dass das Ergebnis einer async Task<T> Null sein kann? Die Verwendung des Attributs [CanBeNull] funktioniert nicht, da der Rückgabewert der asynchronen Task nie null ist.ReSharper Code Anmerkungen async Aufgabe <T>

[CanBeNull] // not working... 
private async Task<T> doSomeFancyAsyncStuff([NotNull] object icantbenull) { ... 
+0

In diesem Fall wird es nie Null sein, da die Compiler Ihre Methoden wickeln Rückgabewert in einer Aufgabe - wenn Sie von dem Asynchron-Schlüsselwort entfernt und musste den Task-Rückgabewert selbst behandeln, dann würde ich mir vorstellen, dass es gut funktionieren würde –

+2

Ich nehme an, was Sie eigentlich wollen, ist zu sagen, dass das 'Ergebnis' der' Aufgabe' null sein kann, richtig? – juharr

+2

Möchten Sie angeben, dass das Ergebnis der Aufgabe null sein kann? Sicher kann es aber die Aufgabe selbst nicht. –

Antwort

3

Sie können die ReSharper verwenden ItemCanBeNullAttribute

Kann appplied zu Symbolen von Typen von IEnumerable sowie Symbole der Aufgabe und faule Klassen abgeleitet werden, um anzuzeigen, dass der Wert eines Auflistelement , der Task.Result Eigenschaft oder der Lazy.Value-Eigenschaft kann null sein.

ItemCanBeNullAttribute

zu Ihrem Beispiel Beworben:

[ItemCanBeNull] 
public async Task<string> GetSomeName() { 
    var time = DateTime.Now; 
    if(time.Second == 30) { 
     return "Jimmy"; 
    } else { 
     return null; 
    } 
} 
+0

Dieses T könnte null sein, wenn es eine Klasse ist, aber ich möchte es explizit mit Code-Contracts markieren, die das Ergebnis '[CanBeNull]' –

+1

Sprechen Sie über das Attribut Resharper CanBeNull? Eine schnelle Google bringt diese http://stackoverflow.com/questions/19704710/cannenruhr-and-resharper-using-it-with-async-tasks – ndonohoe

+0

Könnten Sie Ihren Kommentar als Antwort hinzufügen, so kann ich es markieren? Vielleicht wird jemand verwirrt wie ich. Ich dachte, dass dieses Attribut eine MS-Code-Contracts-Sache ist. Entschuldigung für die Verwirrung :) –