Ketika fungsi C# di Function Compute melemparkan pengecualian atau berhenti secara tidak terduga, platform menangkap informasi sebanyak mungkin dan mengembalikan detail error dalam format terstruktur. Memahami perilaku ini membantu Anda menulis penanganan error yang gagal secara elegan namun tetap dapat ditelusuri.
Error yang dilemparkan oleh fungsi
Ketika terjadi error selama eksekusi fungsi, Function Compute menangkap pengecualian tersebut dan mengembalikan detail error dalam badan respons.
Contoh berikut melemparkan pengecualian yang tidak ditangani:
using System;
using System.IO;
using System.Threading.Tasks;
using Aliyun.Serverless.Core;
using Microsoft.Extensions.Logging;
namespace Example
{
public class Hello
{
public async void StreamHandler(Stream input, IFcContext context)
{
throw new Exception("oops");
}
static void Main(string[] args){}
}
}Saat Anda memanggil fungsi ini, badan respons berisi:
{
"errorMessage": "oops",
"errorType": "System.Exception",
"stackTrace": [...]
}Respons tersebut juga menyertakan Header HTTP X-Fc-Error-Type: UnhandledInvocationError. Untuk daftar lengkap jenis error Function Compute, lihat Basics.
Keluar proaktif dari fungsi
Memanggil System.Environment.Exit(1) di dalam penanganan fungsi akan menghentikan proses sebelum Function Compute sempat menangkap detail error. Respons hanya berisi pesan umum—tanpa jenis error maupun jejak stack:
{
"errorMessage": "Process exited unexpectedly before completing request (duration: 45ms, maxMemoryUsage: 49MB)"
}Hindari penggunaan System.Environment.Exit() dalam penanganan fungsi. Jika Anda perlu menangani sinyal shutdown atau membersihkan sumber daya sebelum terminasi, gunakan penanganan pengecualian terstruktur sebagai gantinya.