2016-08-18 12 views
0

私は維持しているwebformsプロジェクトでNullReferenceExceptionsを取得しています。キャッチは、私のコードのどれも例外を引き起こさないので、この例外のためのスタックトレースがないということです。 クリップボードにコピーNullReferenceException was unhandledasync awaitタスクnull参照例外

例外の詳細は、ゼロの支援を提供しています:
System.NullReferenceException was unhandled Message: An unhandled exception of type 'System.NullReferenceException' occurred in mscorlib.dll Additional information: Object reference not set to an instance of an object.

Iは、非ユーザーコードのスタックトレースを表示すると、私は(すべてmscorlibで)以下を参照してください。 Stack Trace

エラーは、ページを読み込むか、ポストバックするかのいずれかによってランダムかつ不整合に発生します。問題は、他のサイトに公開されているRESTサービスからデータを取得するためにSystem.Net.Http.HttpClientを追加した後に始まりました。 HttpClientには、データを送受信するための非同期メソッドしか含まれていないことに注意してください。内部スタックトレースに基づいて、私は非常に、タスク<>/async/awaitが原因と思われます。

トラブルシューティングを支援するために、.NET 4.6でコンパイルされたWebFormsサイトでこれを実行していることを再確認してください(問題がMVCにアップグレードする必要があると私に伝えたい場合は、キーストロークとそれを言ってはいけない)。 HttpClientをタスク<>として、すべてを公開している間、私は呼び出すことによって同期それらを呼び出しています:事前に
Task<MyObject> myResultTask = restClient.GetResultAsync(); MyObject myResult = myResultTask.Result; // no await

感謝を!

+3

だけ – Steve

+0

@Steve笑のawaitを呼び出すいいえ、[ 'Task.Result'](https://msdn.microsoft.com/en-us/library/dd321468( v = 1.10).aspx)_does_タスクが完了して値を返すのを待ちます。 –

+2

@RenéVogtもし私が覚えていれば、あなたは奇妙な問題に遭遇することなく、簡単にすべての種類の問題に遭遇することができます。 – Steve

答えて

2

私はちょうどこの問題を抱えており、答えとして提案したいと思います。あなたのweb.configファイルで

あなたは以下の持っていることを確認してください。

https://blogs.msdn.microsoft.com/webdev/2012/11/19/all-about-httpruntime-targetframework/

それだけでクラッシュするようだ:

<system.Web> 
     <httpRuntime targetFramework="4.5" /> 
    </system.Web> 

<appSettings> 
    <add key="aspnet:UseTaskFriendlySynchronizationContext" value="true" />  
</appSettings> 

は、ここに詳細情報を参照してください。あなたがこれをしないと無作為に。私は下位互換性の大きなファンですが、あなたが新しい方法に同意しないとクラッシュしたときではありません。

(ステファン・クリアリーからのコメントに推奨)