All Products
Search
Document Center

Function Compute:Metode kait siklus hidup instans fungsi

Last Updated:Apr 02, 2026

Function Compute mendukung tiga kait siklus hidup untuk runtime C#: Initializer, PreFreeze, dan PreStop. Setiap kait dijalankan pada titik tertentu dalam siklus hidup instans fungsi, memungkinkan Anda menjalankan logika inisialisasi, menyimpan checkpoint status sebelum pembekuan, atau membersihkan sumber daya sebelum instans dihapus.

Urutan siklus hidup

Kait dijalankan dalam urutan berikut untuk setiap instans fungsi:

  1. Initializer — dijalankan setelah instans dimulai, sebelum pemanggilan penanganan pertama

  2. *(pemanggilan penanganan normal)*

  3. PreFreeze — dijalankan sebelum instans memasuki status beku

  4. PreStop — dijalankan sebelum instans dihapus

Untuk deskripsi lengkap mengenai siklus hidup instans, lihat Siklus hidup instans fungsi.

Penagihan

Eksekusi kait siklus hidup ditagih dengan cara yang sama seperti permintaan pemanggilan biasa. Log eksekusi muncul di Function Logs, Instance Logs, dan Advanced Logs, tetapi tidak muncul di Call Request List.

Signature metode

Ketiga kait tersebut memiliki signature metode yang sama dalam runtime C#: satu parameter input IFcContext context tanpa nilai kembali.

public void FunctionName(IFcContext context);

Metode statis juga didukung:

public static void FunctionName(IFcContext context);

Perilaku kait Initializer

  • Function Compute memastikan kait Initializer berhasil dieksekusi hanya sekali dalam siklus hidup instans fungsi.

  • Jika kait Initializer gagal, Function Compute mengembalikan error untuk pemanggilan tersebut. Saat Anda memanggil fungsi berikutnya, sistem akan membuat instans baru untuk mengeksekusi kait Initializer.

Contoh: StreamRequestHandler

Contoh berikut menunjukkan kelas yang mengimplementasikan ketiga kait siklus hidup bersamaan dengan penanganan aliran.

using System;
using System.IO;
using System.Threading.Tasks;
using Aliyun.Serverless.Core;
using Microsoft.Extensions.Logging;

namespace Example
{
    public class Hello
    {
        public void Initialize(IFcContext context)
        {
            IFcLogger logger = context.Logger;
            logger.LogInformation("Initialize start");
            logger.LogInformation("Handle initializer: {0}", context.RequestId);
            logger.LogInformation("Initialize end");
        }

        public void PreStop(IFcContext context)
        {
            IFcLogger logger = context.Logger;
            logger.LogInformation("PreStop start");
            logger.LogInformation("Handle PreStop: {0}", context.RequestId);
            logger.LogInformation("PreStop end");
        }

        public void PreFreeze(IFcContext context)
        {
            IFcLogger logger = context.Logger;
            logger.LogInformation("PreFreeze start");
            logger.LogInformation("Handle PreFreeze: {0}", context.RequestId);
            logger.LogInformation("PreFreeze end");
        }

        public async Task<Stream> StreamHandler(Stream input, IFcContext context)
        {
            IFcLogger logger = context.Logger;
            logger.LogInformation("Handle request: {0}", context.RequestId);

            MemoryStream copy = new MemoryStream();
            await input.CopyToAsync(copy);
            copy.Seek(0, SeekOrigin.Begin);
            return copy;
        }

        static void Main(string[] args){}
    }
}

Konfigurasi kait siklus hidup

Gunakan Konsol Function Compute

Konfigurasikan kait siklus hidup pada halaman Function Details di Konsol Function Compute. Untuk detail navigasi, lihat Konfigurasi PreFreeze hook dan PreStop hook di Konsol Function Compute.

Format penanganan kait mengikuti konvensi yang sama seperti penanganan permintaan: Nama Assembly::Namespace.Nama Kelas::Nama Metode. Untuk detail selengkapnya, lihat Handler.

Contoh untuk kelas Hello dalam namespace Example, dikemas sebagai HelloFcApp:

HookNilai handler
InitializerHelloFcApp::Example.Hello::Initialize
PreFreezeHelloFcApp::Example.Hello::PreFreeze
PreStopHelloFcApp::Example.Hello::PreStop

Gunakan Serverless Devs

Tambahkan kait ke blok function dalam file s.yaml Anda:

HookBidang yang Akan Ditambahkan
Initializerinitializer, initializationTimeout
PreFreezeinstanceLifecycleConfig.preFreeze dengan Handler dan Timeout
PreStopinstanceLifecycleConfig.preStop dengan Handler dan Timeout
edition: 1.0.0
name: hello-world
access: default

vars:
  region: cn-shanghai
  service:
    name: fc-example
    description: 'fc example by serverless devs'

services:
  helloworld:
    component: fc
    actions:
      pre-deploy:
        - run: mvn package
          path: ./
    props:
      region: ${vars.region}
      service: ${vars.service}
      function:
        name: dotnet-lifecycle-hook-demo
        description: 'fc example by serverless devs'
        runtime: dotnetcore3.1
        codeUri: ./target
        handler: example.App::handleRequest
        memorySize: 128
        timeout: 60
        initializer: HelloFcApp::Example.Hello::Initialize
        initializationTimeout: 30
        instanceLifecycleConfig:
          preStop:
            Handler: HelloFcApp::Example.Hello::PreStop
            Timeout: 30
          preFreeze:
            Handler: HelloFcApp::Example.Hello::PreFreeze
            Timeout: 30

Untuk referensi sintaksis YAML lengkap, lihat Perintah Serverless Devs.

Lihat log kait siklus hidup

  1. Masuk ke Konsol Function Compute. Di panel navigasi kiri, klik Services & Functions.

  2. Di bilah navigasi atas, pilih wilayah. Pada halaman Services, klik layanan yang diinginkan.

  3. Pada halaman Functions, klik nama fungsi. Di halaman Function Details, klik tab Test Function.

  4. Klik Test Function, lalu pilih Logs > Function Logs.

Tab Function Logs menampilkan log pemanggilan bersama dengan log kait Initializer dan PreFreeze. Contoh:

2022-10-09 19:26:17 FunctionCompute dotnetcore3.1 runtime inited.
2022-10-09 19:26:17 FC Initialize Start RequestId: 793ad2f1-9826-4d9a-90d9-5bf39e******
2022-10-09 19:26:17 2022-10-09 19:26:17 793ad2f1-9826-4d9a-90d9-5bf39e****** [INFO] Initialize start
2022-10-09 19:26:17 2022-10-09 19:26:17 793ad2f1-9826-4d9a-90d9-5bf39e****** [INFO] Handle initializer: 793ad2f1-9826-4d9a-90d9-5bf39e******
2022-10-09 19:26:17 2022-10-09 19:26:17 793ad2f1-9826-4d9a-90d9-5bf39e****** [INFO] Initialize end
2022-10-09 19:26:17 FC Initialize End RequestId: 793ad2f1-9826-4d9a-90d9-5bf39e******
2022-10-09 19:26:17 FC Invoke Start RequestId: 793ad2f1-9826-4d9a-90d9-5bf39e******
2022-10-09 19:26:17 2022-10-09 19:26:17 793ad2f1-9826-4d9a-90d9-5bf39e****** [INFO] Handle request: 793ad2f1-9826-4d9a-90d9-5bf39e******
2022-10-09 19:26:17 FC Invoke End RequestId: 793ad2f1-9826-4d9a-90d9-5bf39e******
2022-10-09 19:26:17 FC PreFreeze Start RequestId: 793ad2f1-9826-4d9a-90d9-5bf39e******
2022-10-09 19:26:17 2022-10-09 19:26:17 793ad2f1-9826-4d9a-90d9-5bf39e****** [INFO] PreFreeze start
2022-10-09 19:26:17 2022-10-09 19:26:17 793ad2f1-9826-4d9a-90d9-5bf39e****** [INFO] Handle PreFreeze: 793ad2f1-9826-4d9a-90d9-5bf39e******
2022-10-09 19:26:17 2022-10-09 19:26:17 793ad2f1-9826-4d9a-90d9-5bf39e****** [INFO] PreFreeze end
2022-10-09 19:26:17 FC PreFreeze End RequestId: 793ad2f1-9826-4d9a-90d9-5bf39e******
Log PreStop tidak muncul secara langsung karena Function Compute menyimpan cache instans untuk periode tertentu sebelum menghapusnya. Untuk memicu kait PreStop segera, perbarui konfigurasi atau kode fungsi. Setelah pembaruan, log PreStop akan muncul di Function Logs.
2022-10-09 19:32:17 FC PreStop Start RequestId: 03be685c-378b-4736-8b08-a67c1d*****
2022-10-09 19:32:17 2022-10-09 19:32:17 03be685c-378b-4736-8b08-a67c1d***** [INFO] PreStop start
2022-10-09 19:32:17 2022-10-09 19:32:17 03be685c-378b-4736-8b08-a67c1d***** [INFO] Handle PreStop: 03be685c-378b-4736-8b08-a67c1d*****
2022-10-09 19:32:17 2022-10-09 19:32:17 03be685c-378b-4736-8b08-a67c1d***** [INFO] PreStop end
2022-10-09 19:32:17 FC PreStop End RequestId: 03be685c-378b-4736-8b08-a67c1d*****

Langkah berikutnya